java普通項目讀取不到resources目錄下資源文件的解決辦法
現(xiàn)象如下:
可以看到resources目錄已經(jīng)在idea中標(biāo)記成了資源目錄resources root,而且target/classes目錄下也編譯出了resources目錄下的pci.properties文件,換句話說:java在編譯時是讀取到了resources下的文件的。
可是為什么new File以后做路徑判斷時為什么返回false,找不到文件呢?
這里需要了解java讀取文件的機制:
java讀取文件的兩種方法:java.io和java.lang.ClassLoader
也就是一個是用java.io,另一個是用類加載器讀取文件
使用java.io(File類就是基于此)默認(rèn)定位到當(dāng)前用戶目錄("user.dir")下, 而不是classpath!:
關(guān)于這一點:可以通過System.getProperty("user.dir")) 驗證:
從上面的代碼可以看到System.getProperty("user.dir"))和new File("") 返回的路徑是一樣的:
都是工程目錄的工作路徑,這一點從idea的配置也可以看到:
所以如果要讀取classPath下的文件,一定不要不要使用File類!
此時應(yīng)該使用類加載器來讀取classpath下文件。
idea環(huán)境下,默認(rèn)的classPath是target/classes
資源目錄resouces下(是src/main/resources目錄,且標(biāo)記成了Resources Root)的文件在編譯時都會自動復(fù)制到classpath下。
所以可以通過類加載器按照如下的方式讀取資源目錄下的文件:
${ClassLoader}.getResource("/${path}") 或者 ${ClassLoader}.getResourceAsStream("/${path}")
classLoader可以通過類名.class的方式來獲取
需要注意的是:getResource括號里面如果留空,則是從實際編譯的路徑去查找而不是classpath, 比如:
因為上面的是單元測試,此時getResource留空,則從target/test-classes開始查找
getResource括號里面如果從斜杠"/"開頭,則從classpath開始查找(也就是target/class)
總結(jié)
到此這篇關(guān)于java普通項目讀取不到resouces目錄下資源文件的解決辦法的文章就介紹到這了,更多相關(guān)java讀取不到resouces資源文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot2.0整合Redis自定義注入bean組件配置的實戰(zhàn)教程
這篇文章主要介紹了SpringBoot2.0整合Redis自定義注入bean組件配置,我們將基于SpringBoot2.0整合搭建的微服務(wù)項目為奠基,開啟中間件Redis的實戰(zhàn)之路,需要的朋友可以參考下2023-06-06Java8 用Lambda表達式給List集合排序的實現(xiàn)
這篇文章主要介紹了Java8 用Lambda表達式給List集合排序的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08解析ConcurrentHashMap: transfer方法源碼分析(難點)
ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧2021-06-06SpringCloud如何根據(jù)服務(wù)名獲取服務(wù)運行實例并進行負(fù)載均衡
文章介紹了SpringCloud中使用Nacos作為注冊中心時,服務(wù)注冊和發(fā)現(xiàn)的過程,以及如何通過DiscoveryClient接口和LoadBalancerClient類進行服務(wù)的負(fù)載均衡,感興趣的朋友跟隨小編一起看看吧2025-01-01spring中IOC控制反轉(zhuǎn)依賴注入和new對象的區(qū)別說明
這篇文章主要介紹了spring中IOC控制反轉(zhuǎn)依賴注入和new對象的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02