查找 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”命令的路径
【讨论】:
谢谢,如果我从 cmdjava -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().getPath());
【讨论】:
谢谢我添加了一个代码。但它正在抛出 NullPointerException @TapasBose 在什么情况下你得到了 NPE,你能详细说明一下你是如何解决的吗?以上是关于查找 Jar 文件的自身位置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章