Java获取执行jar而不使用.jar文件的路径

时间:2015-05-16 13:18:49

标签: java path resources

我正在尝试使用intelij Idea工件将我的应用导出到jar中。我导出除资源之外的所有内容(我认为14.5GB对.jar文件来说太多了)所以我将/res文件夹放在与jar相同的文件夹中。

现在我的结构看起来像这样:

/SAR.jar
/res/colors/
/res/icons/
/res/map/

但是我无法访问这些资源。我使用以下代码获取路径:  dir = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath() + "/res/icons/");

从IDE运行时它可以正常工作并打印正确的位置。但是当我构建一个工件并通过cmd运行它时,我得到了空指针并打印了这条路径:D:/JavaProject/SAR/out/artifacts/SAR_jar/SAR.jar/res/icons。但我的资源不在jar文件中,它们只在同一目录中。

有什么想法吗?我在路径中只完成了android项目,我只是无法通过jar工作来获得这个资源系统。

先谢谢

1 个答案:

答案 0 :(得分:2)

您正在尝试使用依赖于源代码位置的路径来访问资源,这显然不是这种情况,因为您将代码(或jar中的字节码)与资源分开。您必须使用相对于jar的路径或绝对路径访问它们。

我认为你只需要以下路径(如果jar是从包含jar的目录运行的):

new File("res/icons/icon.png")