java war包 路徑--解決war包中文件路徑問題


https://blog.csdn.net/u013409283/article/details/51480948

 

轉自:http://free-chenwei.iteye.com/blog/1507480

下面展示一段代碼
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,估計看完了你腦殼也昏了

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM