注意: 若從 Ant 啟動程式,this.getClass().getResource("") 取得結果較怪異,直接用 Java 命令列除錯即可成功。
URL base = this.getClass().getResource(""); // 取得本類位置,如 /home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "../../../" + name).getCanonicalPath(); // 可得 /home/popeye/testjava/name
FileTest.class.getResource("") — 當前類 class 檔的 URI 目錄(不含自身)file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/FileTest.class.getResource("/") — 當前 classpath 絕對 URI 路徑file:/D:/java/eclipse32/workspace/jbpmtest3/bin/Thread.currentThread().getContextClassLoader().getResource("") — 同上file:/D:/java/eclipse32/workspace/jbpmtest3/bin/FileTest.class.getClassLoader().getResource("") — 同上file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ClassLoader.getSystemResource("") — 同上file:/D:/java/eclipse32/workspace/jbpmtest3/bin/推薦: 使用 Thread.currentThread().getContextClassLoader().getResource("") 取得當前 classpath 絕對路徑的 URI 表示法。
透過 ServletContext.getRealPath("/") 取得 Web 應用根目錄絕對路徑,再提供相對於根目錄的路徑,即可建構資源絕對路徑。
System.getProperty("user.dir") 相對路徑 — 這是定時炸彈,隨時可能出事ClassLoaderUtil.getExtendResource(relativePath) 定位所有資源最佳實踐: 使用程式取得 classpath 絕對路徑來拼湊資源絕對路徑。