java 中 getResourceAsStream() 方法總結


方法作用

用於獲取工程里的資源文件,返回 InputStream 輸入流對象

方法分類 (以下 path 均為編譯后的class文件所在目錄,而不是源碼文件所在目錄 )

  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.getResourceAsStream(String path) 使用

當資源文件與該類在一個目錄下時

  • 要加載的文件和.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");

Class.getClassLoader.getResourceAsStream(String path) 使用

通過類加載器來進行資源文件的加載。本方法中的 path 默認是項目的根路徑,也就是上面說的不帶 '/'的絕對路徑。

ServletContext. getResourceAsStream(String path) 使用

path 目錄默認使用 webapp 下的目錄,不是eclipse或其他IDE中項目所在的目錄,而是將項目發布到的 Tomcat 服務下的 webapps 下, 在webapps/appName/下獲取資源文件。

最后,自己的理解:
getResourceAsStream讀取的文件路徑只局限與工程的源文件夾中,包括在工程src根目錄下,以及類包里面任何位置,但是如果配置文件路徑是在除了源文件夾之外的其他文件夾中時,該方法是用不了的。


免責聲明!

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



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