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

Java 取得當前路徑與 Classpath 完整指南

     編輯:Java 相關知識

常見路徑取得方法彙整

注意: 若從 Ant 啟動程式,this.getClass().getResource("") 取得結果較怪異,直接用 Java 命令列除錯即可成功。

Classpath 與類絕對路徑取得方法

取得 Classpath 外路徑

URL base = this.getClass().getResource(""); // 取得本類位置,如 /home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "../../../" + name).getCanonicalPath(); // 可得 /home/popeye/testjava/name

五種取得 Classpath 絕對 URI 路徑的方法

  1. FileTest.class.getResource("") — 當前類 class 檔的 URI 目錄(不含自身)
    例:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
  2. FileTest.class.getResource("/") — 當前 classpath 絕對 URI 路徑
    例:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
  3. Thread.currentThread().getContextClassLoader().getResource("") — 同上
    例:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
  4. FileTest.class.getClassLoader().getResource("") — 同上
    例:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
  5. ClassLoader.getSystemResource("") — 同上
    例:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

推薦: 使用 Thread.currentThread().getContextClassLoader().getResource("") 取得當前 classpath 絕對路徑的 URI 表示法。

Web 應用程式中的路徑處理

透過 ServletContext.getRealPath("/") 取得 Web 應用根目錄絕對路徑,再提供相對於根目錄的路徑,即可建構資源絕對路徑。

關鍵注意事項(避坑指南)

  1. 避免使用 System.getProperty("user.dir") 相對路徑 — 這是定時炸彈,隨時可能出事
  2. 優先使用 URI 形式絕對路徑 — 易轉換為 URI、URL、File 物件
  3. 優先使用相對 classpath 的相對路徑 — 避免絕對路徑。可用 ClassLoaderUtil.getExtendResource(relativePath) 定位所有資源
  4. 絕對不要硬編碼絕對路徑 — 完全沒必要!會讓程式無法移植,死得很難看
  5. 若必須指定絕對路徑,用設定檔 — 比硬編碼好得多

最佳實踐: 使用程式取得 classpath 絕對路徑來拼湊資源絕對路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved