Java 获取不带.jar 文件的jar 执行路径

Java get path of executing jar without .jar file

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

相同的文件夹中

现在我的结构是这样的:

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

但是我无法访问此资源。我正在使用以下代码获取路径: 目录 = 新 File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath() + "/res/icons/");

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

有什么想法吗?我只在路径中完成了 android 个项目,我根本无法让这个带有 jars 的资源系统工作。

感谢转发

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

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

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