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

Java getResource 路徑含空格導致 %20 問題解析

     編輯:程式設計綜合問答

開發者使用 getClass().getResource() 獲取資源文件路徑時,發現輸出路徑中出現 %20,導致無法正確定位文件。本文解釋原因並給出解決方案。

問題現象

// 代碼
URL url = this.getClass().getResource("/users.xml");
// 輸出
file:/D:/myeclipse/MyEclipse%2010/workspace/Web_project/WebRoot/WEB-INF/classes/users.xml

預期路徑:/D:/myeclipse/MyEclipse 10/workspace/...
實際路徑:MyEclipse%2010 中的 %20 代表空格。

根本原因

URL 標準規定路徑中的空格必須進行百分號編碼(Percent-encoding),空格編碼為 %20。getResource() 返回的是 URL 對象,其 toString() 或 getPath() 會保留編碼格式。

解決方案

  1. 使用 URLDecoder.decode() 解碼(推薦):
    String path = URLDecoder.decode(url.getPath(), "UTF-8");
  2. 改用 File 構造(僅限 file 協議):
    File file = new File(url.toURI()); // 自動處理編碼
  3. 避免路徑含空格:項目路徑、工作空間盡量不包含空格,從源頭消除問題。

代碼示例

try {
    URL url = this.getClass().getResource("/users.xml");
    if (url != null) {
        String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8");
        System.out.println("真實路徑: " + decodedPath);
        // 輸出: /D:/myeclipse/MyEclipse 10/workspace/...
    }
} catch (Exception e) {
    e.printStackTrace();
}

總結:%20 是 URL 編碼後的空格,使用 URLDecoder 或 toURI() 即可獲得正確的文件系統路徑。

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