1. 程式人生 > >java獲取classpath檔案路徑空格轉變成了轉義字元%20的問題解決 !

java獲取classpath檔案路徑空格轉變成了轉義字元%20的問題解決 !

這個問題很糾結,伺服器的檔案路徑帶有空格,空格被轉化是%20了,悲劇就出現了,趕緊收藏了!

下面展示一段程式碼
String path = getClass().getResource("/").getPath();

String path = getClass().getClassLoader.getResource("").getPath(); 
如果當前路徑中包含了空格,則返回的路徑字串空格則被轉義為(%20),如何解決這個問題呢?

String path = getClass().getResource("/").toURI().getPath();

String path = getClass().getClassLoader.getResource("").toURI().getPath(); 

也可以   java.net.URLDecoder.decode(path,"UTF-8 ");其他編碼也是可以的哈。


到這個地方其實還有兩個疑問1.getClass().getResource("/")與getClass().getClassLoader.getResource("/")有什麼區別;
2.toURI()是什麼;

Class().getResource與ClassLoader.getResource

Class().getResource,如果以 “/”開始則查詢的路徑是以classpath指向的絕對路徑,包括jar檔案路徑,
如果不是以“/”開始,則查詢的路徑是從當前包路徑開始查詢,故jar檔案查詢不到


ClassLoader.getResource,查詢的時候不能以“/”開頭,查詢的路徑必須是絕對路徑,查詢範圍包括jar檔案


例子:可以在任意包路徑下執行,然後根據結果得出以上結論

System.out.println(getClass().getResource(""));
System.out.println(getClass().getResource("/"));
System.out.println(getClass().getClassLoader().getResource(""));
System.out.println(getClass().getClassLoader().getResource("/"));

PS:檢視一下Class.getResource原始碼,會發現最終都是以ClassLoader.getResource獲取資源位置

WEB應用中也可以這樣用:
URL url = (URL) ServletActionContext.getServletContext().getResource("/WEB-INF/classes/config/chen wei/jdbc.properties");
// URL url = (URL)req.getSession().getServletContext().getResource("/WEB-INF/webinffile.txt");


URI與URL

ClassLoader.getResource("/").toURI()或Class().getResource("/").toURI()

getResource方法返回的是一個URL物件,toURI()是將RUL物件轉換為URI物件.

查看了 URL和URI 對於getPath()方法的原始碼,前者是沒有對轉義字元的解碼的過程,而後則是有一個解碼的過程
java.net.URLDecoder.decode;


URI與URL區別,我只是簡單說說我簡單的理解的

URI統一資源識別符號,是針對整個資源的一個屬性的管理物件,包括了URL

URL統一資源定位符,是對資源的管理,如獲取資原始檔流等

詳細的自己看JDK API,估計看完了你腦殼也昏了

詳細的是就自己看吧你看看額,我覺得還是不錯的喲,肯定很好耍,