首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 開發必懂:Class.getResource 與 ClassLoader.getResource 路徑差異詳解

     編輯:Java 綜合教學

Java 開發必懂:Class.getResource 與 ClassLoader.getResource 路徑差異詳解

讀取類路徑下資源時,常見兩種方式,路徑前綴「/」的含義截然不同,搞混極易導致 NullPointerException。

1. Class.getResource(String path)

  • 不以「/」開頭:相對於當前類所在包查找資源。
  • 以「/」開頭:從ClassPath 根目錄查找。

驗證代碼

System.out.println("path:" + Resources.class.getResource("/"));
System.out.println("path:" + Resources.class.getResource(""));

輸出結果

path:file:/home/xiaosi/Study/lectures/target/classes/
path:file:/home/xiaosi/Study/lectures/target/classes/com/qunar/lectures/

前者指向 classpath 根,後者指向當前類包目錄。

2. ClassLoader.getResource(String path)

  • 路徑不能以「/」開頭,否則返回 null。
  • 永遠從ClassPath 根目錄開始查找。

驗證代碼

System.out.println(r.getClass().getClassLoader().getResource(""));
System.out.println(r.getClass().getClassLoader().getResource("/")); // null

輸出結果

file:/home/xiaosi/Study/lectures/target/classes/
null

核心區別速查表

方法相對路徑起點是否允許以「/」開頭
Class.getResource當前類所在包允許,表示 classpath 根
ClassLoader.getResourceclasspath 根不允許,會返回 null

最佳實踐建議

  1. 統一使用 ClassLoader.getResource("config/xxx.xml"),路徑不加「/」,從 classpath 根開始,清晰一致。
  2. 若在非靜態方法中,可用 this.getClass().getResource("/config/xxx.xml"),明確以「/」開頭表示從根查找。
  3. 避免混用兩種風格,團隊內制定統一規約。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved