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

Pio*_*zyk 61 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 class being invoked: " + path);
 }

}
Run Code Online (Sandbox Code Playgroud)

有没有办法在调用MyClass.class文件的文件系统中获取和打印正确的路径?

同样,如果我从java -jar命令调用jar文件,有没有办法从该jar内的类中获取jar文件的路径?

PS:请不要做任何假设有关工作目录java被调用的命令!

小智 95

以下代码段将为您执行此操作:

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
Run Code Online (Sandbox Code Playgroud)

替换MyClass你的main班级

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

  • 在执行此操作时要小心:如果您的类文件位于其中包含空格的目录中的某个位置,则返回的字符串(它是URL的路径部分,getLocation()返回,因此是URL编码的)将包含'% 20'而不是空格! (7认同)
  • @JandeVos 使用 `File(java.net.URI)` 构造函数似乎可以解决这个问题。 (2认同)