有没有办法在运行时从这个类的代码确定已执行类的当前文件系统位置,因为它是使用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文件的路径?
P.S.:Please, 不要对调用java
命令的工作目录做任何假设!
答案 0 :(得分:92)
以下代码段将为您执行此操作:
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
将MyClass
类替换为main
生成的File
对象f
表示已执行的.jar
文件。您可以使用此对象让父级查找.jar
所在的目录。