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

