欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java普通項目讀取不到resources目錄下資源文件的解決辦法

 更新時間:2023年09月04日 09:11:50   作者:kingtopest  
這篇文章主要給大家介紹了關(guān)于java普通項目讀取不到resources目錄下資源文件的解決辦法,Web項目中應(yīng)該經(jīng)常有這樣的需求,在maven項目的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)文章

最新評論