[英]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.