繁体   English   中英

在Java中获取资源(jar)路径

[英]Get resource(jar) path in java

我在应用程序中有一个XYZ类,该类在任何目录中均以jar执行。 我想找到执行jar的当前目录路径,为此我使用了以下代码。

String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()

我在XYZ类的公共构造函数中编写了此代码,但由于使用了很长时间,因此无法正常工作,但是现在不返回当前目录路径。

请标记并提出问题所在。

当您在“ this”中执行语句时-这意味着您正在尝试查找该类的当前实例,但您需要查找该类本身。 您可以使用以下方法:

字符串路径= XYZ.class.getProtectionDomain()。getCodeSource()。getLocation()。getPath();

字符串解码路径= URLDecoder.decode(path,“ UTF-8”);

它会为您提供所需的路径,并解决该路径中的空格和特殊字符问题。

如果您在Linux上执行此操作,则可能有用:

URLDecoder.decode(ClassLoader.getSystemClassLoader()。getResource(“。”)。getPath(‌),“ UTF-8”);

 return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

要么

return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath().toURI());

...但是现在它不返回当前目录路径。

它不应返回当前目录路径。 它应该返回该类来自的jar文件的路径,或者返回从中加载该类文件的根文件夹的路径(如果未包装在jar中)。 它可能并且可能不是当前文件夹。

调用

this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()

将尝试找到当前实例( this )的类来自的路径。

确保您从中开始的Class是jar文件的一部分。 例如,不要使用this而是使用一个明确的类(您确定该类来自jar文件),例如

SomeClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()

还要注意,如果从IDE启动应用程序,则此操作将不起作用,在这种情况下,结果将是bin文件夹(已编译类文件的根文件夹)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM