繁体   English   中英

无法从jar加载资源文件

[英]Can't load resources file from jar

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

我这样得到它:

String configFile = this.getClass().getResources("config.json").getPath();

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

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

我该如何解决这个问题?

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

而不是.getResources("config.json").getPath();

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

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

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

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

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

InputStream configStream = this.getClass().getResourceAsStream("config.json");

configStreamnull时,您将知道类路径中不存在该文件。

现在唯一缺少的是路径的String -representation,但我想不出你真正需要它的用例 - 如果你真的真的需要它,你可以用你原来的方式来获得它。

PS:我也想不出你得到路径时必须检查文件是否存在的原因 - 如果文件不存在this.getClass().getResources("config.json").getPath(); 应该用NullPointerException失败!!

我想如果你使用mvn来构建jar

你可以构建具有所有依赖关系的jar。 这将打包所需的依赖jar和文件。 你可以阅读http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html

在gradle中https://github.com/musketyr/gradle-fatjar-plugin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM