获取java中的资源(jar)路径

时间:2014-09-04 06:40:25

标签: java window classpath executable-jar

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

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

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

请在此标记并提出问题。

3 个答案:

答案 0 :(得分:1)

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

  

String path = XYZ.class.getProtectionDomain()。getCodeSource()。getLocation()。getPath();

     

String decodingPath = URLDecoder.decode(path,“UTF-8”);

它将为您提供您正在寻找的路径,并将解决此路径中的空格和特殊字符的问题。

如果你是为Linux做这个,那么使用它可能是有用的:

  

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

答案 1 :(得分:0)

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

OR

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

答案 2 :(得分:0)

  

...但现在它没有返回当前目录路径。

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

调用

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

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

确保您开始的Class是jar文件的一部分。例如。不要使用this,而是使用一个你确定来自jar文件的显式类,例如。

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

另请注意,如果从IDE启动应用程序,这将无效,在这种情况下,结果将是bin文件夹(已编译类文件的根文件夹)。