下面展示一段代碼
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,估計看完了你腦殼也昏了
詳細的是就自己看吧你看看額,我覺得還是不錯的喲,肯定很好耍,
------------------越是喧嚣的世界,越需要甯靜的思考------------------
合抱之木,生于毫末;九層之台,起于壘土;千裡之行,始于足下。
積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千裡;不積小流,無以成江海。骐骥一躍,不能十步;驽馬十駕,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鳝之穴無可寄托者,用心躁也。