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

Java 獲取項目/類/資源路徑的完整指南:Java類、JSP、Servlet 三大場景全覆蓋

     編輯:Java 相關知識

核心概念區分

  • 絕對路徑:文件系統真實物理路徑(如 /home/user/project/target/classes/)。
  • 相對路徑:相對於某個基準目錄(如項目根目錄、classpath 根)。
  • Classpath 路徑:classpath: 前綴標識,指編譯輸出目錄(target/classes)及依賴 JAR 內部。

場景一:Java 普通類中獲取路徑

代碼方式返回內容典型輸出示例適用場景
Thread.currentThread().getContextClassLoader().getResource("")Classpath 根路徑 (URL)file:/project/target/classes/通用、線程上下文類加載器
ClassLoader.getSystemResource("")系統類加載器 Classpath 根同上應用主類加載器
MyClass.class.getClassLoader().getResource("")當前類加載器 Classpath 根同上指定類加載器
MyClass.class.getResource("/")Classpath 根路徑 (URL)同上以 / 開頭=Classpath 根
MyClass.class.getResource("")當前類包路徑 (URL)file:/project/target/classes/com/pkg/相對當前類包
System.getProperty("user.dir")項目根目錄 (String)/project讀取配置文件、項目相對路徑
System.getProperty("java.class.path")完整 Classpath 字符串/project/target/classes:/lib/a.jar:/lib/b.jar調試類加載問題

關鍵提示:getResource 返回 URL,文件協議為 file:,JAR 內資源為 jar:file:...!/。獲取真實文件路徑請用 url.toURI() 再 new File(uri),避免空格/中文編碼問題。

場景二:JSP 頁面中獲取路徑

// 1. 請求相對路徑 (如 /myapp/page.jsp)
String requestURI = request.getRequestURI();

// 2. 當前 JSP 文件的絕對磁盤路徑
String realPath = application.getRealPath(request.getRequestURI());

// 3. Web 應用根目錄絕對路徑 (最常用)
String webRoot = application.getRealPath("/");

// 4. 當前 JSP 所在目錄的父目錄
File parentDir = new File(application.getRealPath(request.getRequestURI())).getParentFile();

場景三:Servlet 中獲取路徑

// 1. Servlet 映射路徑 (如 /servlet/xxx)
String servletPath = request.getServletPath();

// 2. 請求資源的絕對磁盤路徑
String realPath = request.getSession().getServletContext().getRealPath(request.getRequestURI());

// 3. Web 應用根目錄絕對路徑 (推薦)
String webRoot = getServletConfig().getServletContext().getRealPath("/");

// ServletContext 獲取三大來源:
// request.getSession().getServletContext()
// getServletConfig().getServletContext()
// pageContext.getServletContext() (僅 JSP)

避坑指南與最佳實踐

  1. 區分「部署後路徑」與「源碼路徑」:getRealPath 返回目標服務器展開後的路徑(如 webapps/ROOT/),非源碼 src/main/webapp。
  2. 資源文件統一放入 src/main/resources,使用 ClassLoader.getResourceAsStream() 讀取流,打包進 JAR 也能正常工作。
  3. Spring 資源抽象:實際項目中直接注入 ResourceLoader 或使用 @Value("classpath:config.yml"),框架屏蔽底層差異。
  4. 避免硬編碼分隔符:用 File.separator 或 Paths.get() (NIO.2) 構建路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved