[英]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");
当configStream
为null
时,您将知道类路径中不存在该文件。
现在唯一缺少的是路径的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.