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

Java 類路徑與工作目錄解析:ClassLoader、Class.getResource 與 System.getProperty 差異實測

     編輯:Java 相關知識

實測比較 7 種取得 Java 類路徑與工作目錄的方法,包含 ContextClassLoader、ClassLoader、Class.getResource、File 根目錄與 user.dir 系統屬性的輸出差異。

測試代碼

public class FileTest {
  public static void main(String[] args) throws Exception {
    System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
    System.out.println(FileTest.class.getClassLoader().getResource(""));
    System.out.println(ClassLoader.getSystemResource(""));
    System.out.println(FileTest.class.getResource(""));
    System.out.println(FileTest.class.getResource("/")); // Class 檔所在路徑
    System.out.println(new File("/").getAbsolutePath());
    System.out.println(System.getProperty("user.dir"));
  }
}

執行結果 (專案路徑: E:\Test\ReadXML)

file:/E:/Test/ReadXML/
file:/E:/Test/ReadXML/
file:/E:/Test/ReadXML/
file:/E:/Test/ReadXML/
file:/E:/Test/ReadXML/
E:\
E:\Test\ReadXML

差異解析

方法回傳值用途
ContextClassLoader.getResource("")類別載入器路徑 (URL)執行緒上下文載入資源
Class.getClassLoader().getResource("")類別載入器路徑 (URL)該類別對應的載入器
ClassLoader.getSystemResource("")系統類別載入器路徑 (URL)啟動類別路徑
Class.getResource("")該類別套件路徑 (URL)相對路徑載入同包資源
Class.getResource("/")Classpath 根路徑 (URL)絕對路徑載入資源 (推薦)
new File("/").getAbsolutePath()檔案系統根目錄Windows 為磁碟根目錄
System.getProperty("user.dir")JVM 啟動工作目錄相對路徑基準 (最常用)

最佳實踐

  • 載入 classpath 內資源:MyClass.class.getResource("/config.properties")。
  • 讀取外部設定檔:new File(System.getProperty("user.dir"), "config.properties")。
  • 避免使用 File("/") 代表專案根目錄,在 Linux/容器環境會指向真實根目錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved