我在資源目錄下有一個檔案:resources/MOResponse/UploadResponse.json
。現在當我使用下面的代碼時:
Resource resourceFetch = resourceLoader. getResource("classpath:/MOResponse/UploadResponse.json") 。
Reader reader = new FileReader( resourceFetch.getURL().getPath( ))。
當我從eclipse運行應用程式時,我只能訪問該檔案。但如果我試圖通過終端使用java -jar命令運行該專案,就會出現 "java.io.FileNotFoundException: file:/home/user/Mintoak/target/mintoak-mo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/MOResponse/UploadResponse.json (No such file or directory)" 的錯誤。
另外,如果我把代碼修改為:
InputStream resourceAsStream = getClass() 。 getClassLoader().getResourceAsStream("/MOResponse/UploadResponse.json") 。
Reader reader = new InputStreamReader( resourceAsStream )。
當使用java -jar命令運行應用程式時,其作業正常。但是現在當我從eclipse運行應用程式時,resourceAsStream顯示為空。
請提供在這兩種情況下都有效的解決方案。
uj5u.com熱心網友回復:
new FileReader
好吧,它的名字是:它可以讀取檔案。字面意思是。只有檔案。資源不是一個;它是卡在某個地方的 jar 檔案中的一些壓縮位元組(或者至少,它可能是)。
你的第二個片段是正確的答案。如果它在eclipse中回傳null,那么你的eclipse專案是錯誤的配置。具體來說,resource檔案夾也應該被視為一個源代碼檔案夾。
好吧,"正確答案 "在這里有點不穩定。你使用的是正確的系統,但你用錯誤的方式來撰寫它。讀取資源的正確方法是ClassYouWriteThisCodeIn.class.getResourceAsStream,而不是getClass().getClassLoader()。如果你進行了子類化,第二種方法就會失效,而且在一些奇特的情況下也會失效,比如當你的代碼在代理運行中時(因為那時classloader是null,表示你正在被系統啟動器加載)。YourClass.class.getResourceAsStream同樣簡單,而且有嚴格意義上較少的注意事項,這使得它具有嚴格的優越性,這意味著它是首選樣式。請注意,如果你這樣做,你需要在你的資源字串前加上一個/(因為沒有它,資源字串是相對于類所在的包而言的,這也可能是有用的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310467.html
標籤:
上一篇:如何有效地讀取非常大的gzipped日志檔案的最后一行?
下一篇:訪問模型領域內的模型實體
