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

Java 工程引用項目內圖片:相對路徑 vs 絕對路徑與 ClassLoader 獲取資源

     編輯:程式設計疑難解答

場景區分

場景獲取方式示例
Web 頁面 (JSP/HTML)相對 WebRoot 路徑<img src="/images/logo.png">(以 / 開頭相對 contextPath)
Java 代碼讀取 resourcesClassLoader.getResourceAsStreamInputStream is = getClass().getResourceAsStream("/img/01.jpg");
文件系統寫入/讀取絕對路徑或相對工作目錄new File("img/01.jpg") 相對啟動目錄

關鍵點

  • src/main/resources 下文件編譯進 target/classes,**打包進 JAR** 時只能用 ClassLoader.getResourceAsStream,**不能用 File**。
  • Web 項目圖片放 src/main/webapp/images,JSP 用 ${pageContext.request.contextPath}/images/xxx.png。
  • 避免在代碼中硬編碼絕對路徑,使用 System.getProperty("user.dir") 或 Spring ResourceLoader 獲取動態路徑。

示例:Service 讀取 resources 圖片轉 Base64

@Autowired ResourceLoader loader;
public String readImgBase64(String path) throws IOException {
    Resource res = loader.getResource("classpath:" + path); // e.g. "img/01.jpg"
    try (InputStream is = res.getInputStream()) {
        return Base64.getEncoder().encodeToString(is.readAllBytes());
    }
}

分清「Web 路徑」「Classpath 資源」「文件系統路徑」三種語境,引用圖片不再迷路。

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