获取正在执行的类的文件系统路径[重复]
Posted
技术标签:
【中文标题】获取正在执行的类的文件系统路径[重复]【英文标题】:Getting filesystem path of class being executed [duplicate] 【发布时间】:2012-07-29 16:12:36 【问题描述】:如果使用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.:请不要对调用java
命令的工作目录做出任何假设!
【问题讨论】:
【参考方案1】:以下代码 sn-p 将为您完成此操作:
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
用你的main
类替换MyClass
生成的File
对象f
表示已执行的.jar
文件。您可以使用该对象让父级找到.jar
所在的目录。
【讨论】:
执行此操作时请注意:如果您的类文件位于包含空格的目录中,则返回的字符串(它是 URL 的路径部分,getLocation() 返回,并且是因此 URL 编码)将包含 '%20' 而不是空格! @JandeVos 使用File(java.net.URI)
构造函数似乎可以解决这个问题。
@Spooky 的评论:所以一定是final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getURI().getPath());
我正在尝试这个,但它返回的是我运行命令的文件夹的路径,而不是带有类文件的子文件夹。以上是关于获取正在执行的类的文件系统路径[重复]的主要内容,如果未能解决你的问题,请参考以下文章