【问题标题】: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 命令的工作目录做出任何假设

【问题讨论】:

    标签: java filepath


    【解决方案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());
    • 我正在尝试这个,但它返回的是我运行命令的文件夹的路径,而不是带有类文件的子文件夹。
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2019-09-22
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多