【问题标题】:Find Self location of a Jar file [duplicate]查找 Jar 文件的自身位置 [重复]
【发布时间】:2012-03-13 01:15:12
【问题描述】:

有什么方法可以让我们以编程方式找到分叉 jar 的当前位置?假设我正在从D:/Jars/myjar.jar 执行一个 Jar,那么我可以从代码中获取该路径吗?


@AljoshaBre 我试过了

try {
        File file = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        System.out.println(file.getAbsolutePath());
    } catch (Exception e1) {

        e1.printStackTrace();
    } 

正在抛出 NPE。 :(

但是

System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());

仅显示 client.jar。不是绝对路径。它在一个罐子里。

【问题讨论】:

  • 可能是因为您的代码在单元测试期间尚未打包到 JAR 文件中,所以它正在抛出 NPE?
  • 谢谢@yegor256,但我不是统一测试。我正在执行 jar 本身。
  • 您需要将调用序列 (getClass().getProtectionDomain()...) 拆分为多行,以便知道究竟返回了什么 null 而不是预期的实例。
  • @TapasBose 你是如何解决 NPE 的?

标签: java path jar


【解决方案1】:

如果你执行它为java -jar D:/Jars/myjar.jar 如果你这样做

new File("afile").getAbsolutePath();

它将返回 D:/Jars/afile 并且你可以只做一个子字符串。

新文件从 jar 所在的文件夹创建文件,因此如果您在应用程序中导入此 JAR,则此方法不起作用。

对不起,我刚刚尝试过......这不是真的:P 它返回您调用“java”命令的路径

【讨论】:

  • 谢谢,如果我从 cmd java -jar "C:\Users\Tanmoy\Desktop\Movie Library.jar" 执行然后 System.out.println(new File("afile").getAbsolutePath()); 打印 C:\Users\Tanmoy\afile 但没有 Desktop 我如何子字符串?
【解决方案2】:

有办法:

return new File(ClassA.class.getProtectionDomain().getCodeSource().getLocation().toURI().g‌​etPath());

【讨论】:

  • 谢谢我添加了一个代码。但它正在抛出 NullPointerException
  • @TapasBose 在什么情况下你得到了 NPE,你能详细说明一下你是如何解决的吗?
猜你喜欢
  • 2012-11-08
  • 2015-04-05
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多