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

Java user.dir 系統屬性:當前工作目錄而非套件路徑、獲取類路徑正確姿勢

     編輯:程式設計綜合問答

誤區

以為 System.getProperty("user.dir") 返回專案根目錄或套件路徑,實際為 **JVM 啟動時的當前工作目錄**。

行為差異示例

獲取類/資源真實路徑的正確方法


// 1. 獲取類檔案所在絕對路徑 (含 jar 內部路徑)
String classPath = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
// file:/opt/app/MyClass.class 或 file:/opt/app/lib/my.jar!/com/example/MyClass.class

// 2. 獲取資源檔案 (推薦)
InputStream is = MyClass.class.getResourceAsStream("/config.properties");
// 類路徑根目錄下的 config.properties

// 3. Spring ResourceLoader (Spring 專案)
Resource resource = resourceLoader.getResource("classpath:config.properties");
File file = resource.getFile(); // 僅限檔案系統,jar 內會拋異常

最佳實踐

  • **勿依賴 user.dir** 定位配置/資源檔,部署環境極易變動。
  • 資源檔放入 src/main/resources,用 ClassLoader.getResourceAsStream() 統一讀取。
  • 需寫入檔案時,用 System.getProperty("user.home") 或 java.io.tmpdir 取得穩定可寫目錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
啟動方式user.dir 值
IDE (Eclipse/IntelliJ) Run專案根目錄
java -jar app.jar (在 /opt/app)/opt/app
cd /tmp && java -cp /opt/app/app.jar Main/tmp
Systemd Service WorkingDirectory=/var/lib/myapp/var/lib/myapp