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í)都會自動(dòng)復(fù)制到classpath下。
所以可以通過類加載器按照如下的方式讀取資源目錄下的文件:
${ClassLoader}.getResource("/${path}")
或者
${ClassLoader}.getResourceAsStream("/${path}")classLoader可以通過類名.class的方式來獲取
需要注意的是:getResource括號里面如果留空,則是從實(shí)際編譯的路徑去查找而不是classpath, 比如:

因?yàn)樯厦娴氖菃卧獪y試,此時(shí)getResource留空,則從target/test-classes開始查找
getResource括號里面如果從斜杠"/"開頭,則從classpath開始查找(也就是target/class)
總結(jié)
到此這篇關(guān)于java普通項(xiàng)目讀取不到resouces目錄下資源文件的解決辦法的文章就介紹到這了,更多相關(guān)java讀取不到resouces資源文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用MultipartFile來上傳單個(gè)及多個(gè)文件代碼示例
這篇文章主要介紹了使用MultipartFile來上傳單個(gè)及多個(gè)文件代碼示例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringBoot整合easyExcel實(shí)現(xiàn)CSV格式文件的導(dǎo)入導(dǎo)出
這篇文章主要為大家詳細(xì)介紹了SpringBoot整合easyExcel實(shí)現(xiàn)CSV格式文件的導(dǎo)入導(dǎo)出,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考下2024-02-02
SpringBoot整合Liquibase實(shí)現(xiàn)對數(shù)據(jù)庫管理和遷移
Liquibase是一個(gè)用于用于跟蹤、管理和應(yīng)用數(shù)據(jù)庫變化的開源工具,通過日志文件(changelog)的形式記錄數(shù)據(jù)庫的變更(changeset),然后執(zhí)行日志文件中的修改,將數(shù)據(jù)庫更新或回滾(rollback)到一致的狀態(tài),本文主要介紹SpringBoot與Liquibase的集成,需要的朋友可以參考下2024-11-11
Apache?Commons?Imaging處理圖像實(shí)例深究
這篇文章主要為大家介紹了Apache?Commons?Imaging處理圖像的實(shí)例探索深究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了基于SpringBoot開發(fā)一個(gè)Restful服務(wù),實(shí)現(xiàn)增刪改查功能,需要的朋友可以參考下2018-01-01
Spring Boot全局異常處理機(jī)制中DispatcherServlet的處理流程和作用
本文深入解析Spring Boot全局異常處理機(jī)制,重點(diǎn)剖析DispatcherServlet的核心作用及其異常處理流程,詳細(xì)介紹了HandlerExceptionResolver接口及其三個(gè)默認(rèn)實(shí)現(xiàn)類的執(zhí)行順序和工作原理,通過源碼分析,展示了Spring MVC如何將異常轉(zhuǎn)換為響應(yīng)2026-01-01
SpringBoot常用注解,thymeleaf,數(shù)據(jù)提交的實(shí)現(xiàn)
SpringBoot簡化了微服務(wù)配置,提供快速啟動(dòng)和內(nèi)嵌容器化web項(xiàng)目,常用注解包括@Component、@RestController等,Thymeleaf為前端頁面渲染提供支持,數(shù)據(jù)提交時(shí)需使用@RequestBody注解2026-01-01
spring?boot?redis中的key失效監(jiān)聽的問題解決
本文主要介紹了spring?boot?redis中的key失效監(jiān)聽的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07

