无法从jar加载资源文件

Mas*_*asi 2 java resources jar

我正在使用存储的配置JSON文件src/test/resources/config.json.

我这样得到它:

String configFile = this.getClass().getResources("config.json").getPath();
Run Code Online (Sandbox Code Playgroud)

我有getPath()方法,因为我需要它的String值,然后检查文件是否存在并最终解析它.

在Eclipse IDE中一切正常,因为我解析文件/bin/config/config.json,但是当我创建JAR文件时,路径是,program.jar!/config/config.json而函数!Files.exists()返回false.

我该如何解决这个问题?

pfr*_*nza 8

当您使用资源加载器时,您应该打开文件的InputStream,而不是通过它的路径引用文件.

代替 .getResources("config.json").getPath();

尝试使用this.getClass().getResourceAsStream("config.json"); 如果返回的流为null,则资源不存在.

这样即使资源被打包到jar中,类加载器也总是会返回正确的东西.


pie*_*t.t 5

您无法使用 -class 访问 jar 内的路径File,因为它不是本机文件系统资源,并且从 jar 中读取比读取普通文件(解包等)需要更多的内容。

因此,要从 jar 加载文件,最好的方法是使用类加载器:它知道如何搜索 jar 文件,如何解压它们等。

所以要读取文件,你最好使用

InputStream configStream = this.getClass().getResourceAsStream("config.json");
Run Code Online (Sandbox Code Playgroud)

configStream当is时,您就会知道该文件不存在于您的类路径中null

现在唯一缺少的是String路径的表示,但我想不出您真正需要它的用例 - 如果您真的非常需要它,您可以使用旧的方式来获取它。

PS:我也想不出为什么在获得路径时必须检查文件是否存在的原因 - 如果文件不存在,this.getClass().getResources("config.json").getPath();则会失败并显示NullPointerException!!