Java 获取正在执行的类的文件系统路径

Java 获取正在执行的类的文件系统路径,java,filepath,Java,Filepath,如果类是使用java命令执行的,那么在运行时有没有办法从该类的代码确定该类的当前文件系统位置 例如,对于以下类: public class MyClass{ public static void main(String[] args){\ new MyClass().doStuff(); } private void doStufF(){ String path = ... // what to do here?! System.out.println("Path of

如果类是使用
java
命令执行的,那么在运行时有没有办法从该类的代码确定该类的当前文件系统位置

例如,对于以下类:

public class MyClass{
 public static void main(String[] args){\
   new MyClass().doStuff();
 }

 private void doStufF(){
   String path = ... // what to do here?!
   System.out.println("Path of class being invoked: " + path);
 }

}
是否有任何方法可以获取并打印刚刚被调用的MyClass.class文件的文件系统中的正确路径

类似地,如果我从
java-jar
命令调用jar文件,有没有办法从jar中的类中获取jar文件的路径


注意:请不要对调用
java
命令的工作目录做出任何假设

以下代码片段将为您完成此操作:

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
main
类替换
MyClass


生成的
文件
对象
f
表示执行的
.jar
文件。您可以使用此对象让父级查找
.jar
所在的目录。

执行此操作时要小心:如果类文件位于某个目录中,该目录中有一个空格,则返回的字符串(是URL的路径部分,getLocation()返回,因此是URL编码的)将包含“%20”而不是空格@JandeVos使用
文件(java.net.URI)
构造函数似乎解决了这个问题。@Spooky的评论:所以它必须是
最终文件f=新文件(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getURI().getPath())我正在尝试此操作,但它返回的是我运行命令的文件夹的路径,而不是带有类文件的子文件夹。