Maven項(xiàng)目讀取resources文件路徑問(wèn)題解決方案
讀取resources下文件的方法
網(wǎng)上有問(wèn)答如下:
問(wèn):
new FileInputStream("src/main/resources/all.properties")
new FileInputStream("./src/main/resources/all.properties")
上面兩個(gè)無(wú)法讀取maven下資源文件目錄下的文件嘛,總是提示找不到該路徑,這么寫(xiě)錯(cuò)了嘛,但是我的其他maven可以讀取
答:
要取編譯后的路徑,而不是你看到的src/main/resources的路徑。如下:
URL url = MyTest.class.getClassLoader().getResource("conf.properties");
File file = new File(url.getFile());
或者
InputStream in = MyTest.class.getClassLoader().getResourceAsStream("conf.properties");
第二種方法,也可以改成
InputStream in = getClass().getClassLoader().getResourceAsStream("conf.properties");
同事的一種的寫(xiě)法是:
InputStream in = getClass().getResourceAsStream("conf.properties");
然后怎么也獲取不到,最后才發(fā)現(xiàn),只要添加了.getClassLoader()就可以了
getClassLoader() 的作用
- getClass():取得當(dāng)前對(duì)象所屬的Class對(duì)象
- getClassLoader():取得該Class對(duì)象的類(lèi)裝載器
- 類(lèi)裝載器負(fù)責(zé)從Java字符文件將字符流讀入內(nèi)存,并構(gòu)造Class類(lèi)對(duì)象,在你說(shuō)的問(wèn)題那里,通過(guò)它可以得到一個(gè)文件的輸入
Class.getClassLoader()的一個(gè)小陷阱,空指針異常:
昨天我的code總在Integer.class.getClassLoader().getResource("*********");這一句拋出空指針異常,定位為getClassLoader()返回null,查了一下jdk的文檔,原來(lái)這里還有一個(gè)陷阱:
這里jdk告訴我們:如果一個(gè)類(lèi)是通過(guò)bootstrap 載入的,那我們通過(guò)這個(gè)類(lèi)去獲得classloader的話,有些jdk的實(shí)現(xiàn)是會(huì)返回一個(gè)null的,比如說(shuō)我用 new Object().getClass().getClassLoader()的話,會(huì)返回一個(gè)null,這樣的話上面的代碼就會(huì)出現(xiàn)NullPointer異常.所以保險(xiǎn)起見(jiàn)我們最好還是使用我們自己寫(xiě)的類(lèi)來(lái)獲取classloader("this.getClass().getClassLoader()“),這樣一來(lái)就不會(huì)有問(wèn)題。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中常見(jiàn)的編碼集問(wèn)題總結(jié)
這篇文章主要為大家整理了一些Java中常見(jiàn)的編碼集問(wèn)題,文中的示例代碼講解詳細(xì),對(duì)我們深入理解Java有一定的幫助,感興趣的小伙伴可以了解一下2023-02-02Maven+oracle+SSM搭建簡(jiǎn)單項(xiàng)目的方法
本篇文章主要介紹了Maven+oracle+SSM搭建簡(jiǎn)單項(xiàng)目的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03淺談Spring Data Redis讀不到設(shè)進(jìn)去的值
本文主要介紹了Spring Data Redis怎么讀不到我剛才設(shè)進(jìn)去的值,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09強(qiáng)烈推薦MyBatis?三種批量插入方式的比較
這篇文章主要介紹了強(qiáng)烈推薦MyBatis?三種批量插入方式的比較,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07mybatis?plus配置自動(dòng)create_time和update_time方式
在處理數(shù)據(jù)時(shí),注意時(shí)間類(lèi)型的轉(zhuǎn)換非常重要,不同編程環(huán)境和數(shù)據(jù)庫(kù)對(duì)時(shí)間數(shù)據(jù)的處理方式各異,因此在數(shù)據(jù)遷移或日常處理中需謹(jǐn)慎處理時(shí)間格式,個(gè)人經(jīng)驗(yàn)表明,了解常用的時(shí)間轉(zhuǎn)換函數(shù)和方法能有效避免錯(cuò)誤,提高工作效率,希望這些經(jīng)驗(yàn)?zāi)転榇蠹規(guī)?lái)幫助2024-09-09