1. 程式人生 > >對Class getResourceAsStream和ClassLoader getResourceAsStream方法

對Class getResourceAsStream和ClassLoader getResourceAsStream方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                這是個很基礎的問題了,這裡提供一些示例,幫助快速理解和記憶這個問題。
在該方法的文件:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29
中詳細有描述了它接收的路徑是如何定義的! 本文原文出處: blog.csdn.net/bluishglc/article/details/38753047 嚴禁任何形式的轉載,否則將委託CSDN官方維護權益!

關於Class.getResourceAsStream

首先, 我們必須先了解根路徑“/”是如何定義的,這對我們使用getResourceAsStream準確載入檔案是很重要的。首先,我們要明白這個根路徑是對應類所處類路徑上的根目錄!什麼意思呢?假如一個專案經過編譯之後生成了如下class檔案和目錄結構:


com   |-github          |-demo          |    |-A.class          |    |-1.txt          |-B.class          |-2.txt


在這樣的編譯輸出目錄下,檔案"1.txt"的絕對路徑名為:"/com/github/demo/1.txt檔案"2.txt"的絕對路徑名為:"/com/github/2.txt 如同getResourceAsStream方法文件上的解釋:以/開頭時是絕對路徑,與類路徑不同的是路徑上的“."換成了"/"。
接下著我們看相對路徑!
首先我們必須明確“相對”路徑總是指相對於當前class的路徑!
例如,如果我們使用
InputStream is= A.class.getResourceAsStream("1.txt");
路徑不是以/開頭,說明這是一個相對路徑,相對的是A.class這個檔案,所以,這裡的“1.txt”所指的正確位置是與A.class處於同一目錄下的1.txt檔案,這一檔案是存在的,所引不會報錯。
如果我們按相對路徑的方式通過A去載入2.txt,則路徑應該這樣描述:
InputStream is= A.class.getResourceAsStream("../2.txt");   

是的,用“.."表示上一級目錄。
如果我們按相對路徑的方式通過B去載入1.txt,則路徑應該這樣描述:   

InputStream is= B.class.getResourceAsStream("demo/1.txt");   

注意!demo前是沒有/的,這是一個相對路徑,是相對於B所在包下的demo子包裡的1.txt檔案,所以這個路徑也是正確無誤的!

關於ClassLoader.getResourceAsStream

class.getResourceAsStream最終呼叫是ClassLoader.getResourceAsStream

只是在這之前對引數進行了調整。如果引數已/開頭,則去除/,否則把當前類的包名加在引數的前面。

在使用ClassLoader.getResourceAsStream時,路徑直接使用相對於classpath的絕對路徑,並且不能已 / 開頭。

InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");



           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述