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.
我该如何解决这个问题?
当您使用资源加载器时,您应该打开文件的InputStream,而不是通过它的路径引用文件.
代替 .getResources("config.json").getPath();
尝试使用this.getClass().getResourceAsStream("config.json"); 如果返回的流为null,则资源不存在.
这样即使资源被打包到jar中,类加载器也总是会返回正确的东西.
您无法使用 -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!!
| 归档时间: |
|
| 查看次数: |
6512 次 |
| 最近记录: |