Maven項目讀取resources文件路徑問題解決方案
讀取resources下文件的方法
網上有問答如下:
問:
new FileInputStream("src/main/resources/all.properties")
new FileInputStream("./src/main/resources/all.properties")
上面兩個無法讀取maven下資源文件目錄下的文件嘛,總是提示找不到該路徑,這么寫錯了嘛,但是我的其他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():取得當前對象所屬的Class對象
- getClassLoader():取得該Class對象的類裝載器
- 類裝載器負責從Java字符文件將字符流讀入內存,并構造Class類對象,在你說的問題那里,通過它可以得到一個文件的輸入
Class.getClassLoader()的一個小陷阱,空指針異常:
昨天我的code總在Integer.class.getClassLoader().getResource("*********");這一句拋出空指針異常,定位為getClassLoader()返回null,查了一下jdk的文檔,原來這里還有一個陷阱:
這里jdk告訴我們:如果一個類是通過bootstrap 載入的,那我們通過這個類去獲得classloader的話,有些jdk的實現(xiàn)是會返回一個null的,比如說我用 new Object().getClass().getClassLoader()的話,會返回一個null,這樣的話上面的代碼就會出現(xiàn)NullPointer異常.所以保險起見我們最好還是使用我們自己寫的類來獲取classloader("this.getClass().getClassLoader()“),這樣一來就不會有問題。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決javac不是內部或外部命令,也不是可運行程序的報錯問題
在學著使用Java的命令行來編譯java文件的時候,遇到了這個問題,本文主要介紹了解決javac不是內部或外部命令,也不是可運行程序的報錯問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Intellij IDEA中一次性折疊所有Java代碼的快捷鍵設置
這篇文章主要介紹了Intellij IDEA中一次性折疊所有Java代碼的快捷鍵設置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05

