Java中getResourceAsStream的用法,讀取jar裡面的檔案

不淨之心發表於2013-03-16
[url]http://riddickbryant.iteye.com/blog/436693[/url]

首先,Java中的getResourceAsStream有以下幾種:
1. Class.getResourceAsStream(String path) : path 不以’/'開頭時預設是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。

2. Class.getClassLoader.getResourceAsStream(String path) :預設則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。

3. ServletContext. getResourceAsStream(String path):預設從WebAPP根目錄下取資源,Tomcat下path是否以’/'開頭無所謂,當然這和具體的容器實現有關。

4. Jsp下的application內建物件就是上面的ServletContext的一種實現。

其次,getResourceAsStream 用法大致有以下幾種:

第一: 要載入的檔案和.class檔案在同一目錄下,例如:com.x.y 下有類me.class ,同時有資原始檔myfile.xml

那麼,應該有如下程式碼:

me.class.getResourceAsStream("myfile.xml");

第二:在me.class目錄的子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.y.file 目錄下有資原始檔myfile.xml

那麼,應該有如下程式碼:

me.class.getResourceAsStream("file/myfile.xml");

第三:不在me.class目錄下,也不在子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.file 目錄下有資原始檔myfile.xml

那麼,應該有如下程式碼:

me.class.getResourceAsStream("/com/x/file/myfile.xml");

總結一下,可能只是兩種寫法

第一:前面有 “ / ”

“ / ”代表了工程的根目錄,例如工程名叫做myproject,“ / ”代表了myproject

me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二:前面沒有 “ / ”

代表當前類的目錄

me.class.getResourceAsStream("myfile.xml");

me.class.getResourceAsStream("file/myfile.xml");

最後,自己的理解:
getResourceAsStream讀取的檔案路徑只侷限與工程的原始檔夾中,包括在工程src根目錄下,以及類包裡面任何位置,但是如果配置檔案路徑是在除了原始檔夾之外的其他資料夾中時,該方法是用不了的。

相關文章