[英]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.