查找 Jar 文件的自身位置 [重复]

Posted

技术标签:

【中文标题】查找 Jar 文件的自身位置 [重复]【英文标题】:Find Self location of a Jar file [duplicate] 【发布时间】: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 的? 【参考方案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,你能详细说明一下你是如何解决的吗?

以上是关于查找 Jar 文件的自身位置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在某些数组位置查找重复的数字

查找当前目录和文件的目录[重复]

使用纬度和经度查找用户位置的名称[重复]

JAVAFX:未设置位置错误[重复]

位置管理器在iPhone中找到当前位置后会重复查找当前位置吗?

查找list中的重复数据,并得到不重复数据索引位置