Maven獲取resources的文件路徑、讀取resources的文件


路徑問題一切要看編譯后的文件路徑

比如,源文件路徑是:

而編譯后的文件路徑為:

也就是說,resources文件夾下的文件在編譯后,都是為根目錄,這種情況下,比如我要讀取resources 文件夾下的 my.txt 文件路徑,

寫法①:

// 編譯后,項目根路徑,寫法1
String url1 = A.class.getClassLoader().getResource("").toString();
// 編譯后,項目根路徑,寫法2
String url2 = A.class.getResource("/").toString();
// 編譯后,文件根路徑
String url3 = A.class.getResource("").toString();

輸出:

file:/D:/IdeaWorkspace/test-null-project/target/classes/
file:/D:/IdeaWorkspace/test-null-project/target/classes/
file:/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

 

寫法②:

// 還有一種getResource 后調用 getFile方法,就沒有 [file:],而是以 [/D:xxx] 這樣的格式
String url4 = A.class.getClassLoader().getResource("").getFile();
String url5 = A.class.getResource("/").getFile();
String url6 = A.class.getResource("").getFile();
System.out.println(url4);
System.out.println(url5);
System.out.println(url6);

輸出:

/D:/IdeaWorkspace/test-null-project/target/classes/
/D:/IdeaWorkspace/test-null-project/target/classes/
/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

 

寫法③:

String url7 = A.class.getClassLoader().getResource("").getPath();
String url8 = A.class.getResource("/").getPath();
String url9 = A.class.getResource("").getPath();
System.out.println(url7);
System.out.println(url8);
System.out.println(url9);

輸出:

/D:/IdeaWorkspace/test-null-project/target/classes/
/D:/IdeaWorkspace/test-null-project/target/classes/
/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

 

至此,上面已經有多種獲取文件路徑的方式,既然拿到路徑,就可以讀取File 文件,進而讀取文件了,如這是my.txt 的內容

則讀取文件內容的代碼可以如下:

// 獲取路徑
String filePath = A.class.getClassLoader().getResource("my.txt").getFile();
File my = new File(filePath);
InputStreamReader isr = new InputStreamReader(new FileInputStream(my), StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
String lineTxt;
while ((lineTxt = br.readLine()) != null) {
    System.out.println(lineTxt);
}
br.close();

輸出:

 

擴展

寫法②getFile 跟寫法③getPath 是有區別的,getResource 方法后返回的是一個 java.net.URL對象,那手動構造一個java.net.URL

URL url = new URL("https://www.baidu.com/img/baidu_jgylogo3.gif?param=1111&param2=aaaaa");
System.out.println("getFile ==> " + url.getFile());
System.out.println("getPath ==> " + url.getPath());

輸出:

getFile == > /img/baidu_jgylogo3.gif?param=1111&param2=aaaaa
getPath ==> /img/baidu_jgylogo3.gif

可以看出,getFile() 方法可以拿到參數值,而getPath() 就是只取文件名,JDK中文文檔相關api如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM