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