获取正在执行的类的文件系统路径[重复]

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()); 我正在尝试这个,但它返回的是我运行命令的文件夹的路径,而不是带有类文件的子文件夹。

以上是关于获取正在执行的类的文件系统路径[重复]的主要内容,如果未能解决你的问题,请参考以下文章

获取系统特殊文件夹路径

Java获取当前路径

lua脚本怎么获取当前正在执行的脚本的当前路径

获取“驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置”虽然设置正确的路径

获取导入模块的文件路径

python pathlib模块(面向对象的文件系统路径)