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

如果在运行时使用 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命令!

87679 次浏览

下面的代码片段将为您完成这项工作:

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

用您的 main类替换 MyClass

生成的 File对象 f表示执行的 .jar文件。您可以使用这个对象获取父目录来查找 .jar所在的目录。