Java 獲取資源文件路徑

1 問題描述

經過源碼運行時,通常使用以下方式讀取資源文件:java

String str = "1.jpg";

資源文件與源碼文件放在同一目錄下,或者擁有同一父級目錄:ide

String str = "a/b/1.jpg";

這樣直接編譯運行沒有問題,可是打成JAR包後會讀取不了,直接拋空指針異常。測試

2 解決辦法

使用URL或者InputStream進行讀取:url

URL url = getClass().getClassLoader().getResource("a/b/1.jpg");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("a/b/1.png");

注意不能在路徑前加/指針

URL url = getClass().getClassLoader().getResource("/a/b/1.jpg");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/a/b/1.png");

這樣讀取出來是null
getClass().getClassLoader().getResource()從源碼運行的URL以下:
在這裏插入圖片描述
從JAR包運行的URL以下:
在這裏插入圖片描述
測試系統Win10,從源碼運行的話有一個file:前綴,而從JAR包運行有一個jar:file:前綴。
前綴通常沒有影響,通常都能直接經過URL獲取文件,好比在SwingJFrame中設置圖標:code

mainFrame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("image/icon.png")).getImage());

若是隻能經過String處理路徑,須要把前綴file:或者jar:file:去掉,JAR的話能夠結合JarFile類讀取文件。blog

相關文章
相關標籤/搜索