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,估計看完了你腦殼也昏了
詳細的是就自己看吧你看看額,我覺得還是不錯的喲,肯定很好耍,