JavaWeb——獲取類路徑下的資源

 

一、項目結構

1、首先,項目的目錄結構大概是這樣

 

二、資源文件存放路徑

1、類路徑下的資源一般放在 src 下。假如先在src的根目錄下新建一個a.txt 文件。

2、實際上a.txt會被加載到:\項目名\out\artifacts\項目擴展名WEB-INF\classes\a.txt  (如果是IDEA,路徑大概就是這樣。當然,如果是其他編譯工具幫你生成的路徑和這個不一樣,也不影響後續的獲取)

自動加載後的文件目錄

 

三、獲取類路徑下的資源方式

1、方式一: ClassLoader

(1)、該方式的路徑是相對於/classes,開頭沒有斜杆的

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到ClassLoader 先得到Class,在得到ClassLoader
        ClassLoader c1=this.getClass().getClassLoader();
        //調用其getResourceAsStream,得到一個InputStream
        InputStream input = c1.getResourceAsStream("a.txt");
        //讀取輸入流,轉成字符串
        String s = IOUtils.toString(input);
        //輸出
        System.out.println(s);
    }

如果資源文件不是直接在src下,而是在其他包下面,如:a.txt 在 com/sunlee/test/ 下 ,如圖:

那麼,只要改成:getResourceAsStream("com/sunlee/test/a.txt") 即可,注意:開頭沒有斜杆的

代碼如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到ClassLoader 先得到Class,在得到ClassLoader
        ClassLoader c1=this.getClass().getClassLoader();
        //調用其getResourceAsStream,得到一個InputStream
        InputStream input = c1.getResourceAsStream("com/sunlee/test/a.txt");
        //讀取輸入流,轉成字符串
        String s = IOUtils.toString(input);
        System.out.println(s);
    }

 

2、方式二:Class 

(1)、該方式是相對於該.class文件所在目錄

(2)、注意:src下的java文件會被編譯成class文件放在 /classes下

(3)、注意:開頭還是沒有斜杆的

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到Class
        Class c = this.getClass();
        //相對於當前.class文件所在目錄
        InputStream input = c.getResourceAsStream("a.txt");
        //讀取輸入流,轉成字符串
        String s = IOUtils.toString(input);
        System.out.println(s);
    }

 

看到這裏可能會有疑問:既然相對於.class文件,那如果我的資源文件和.class文件不同目錄怎麼辦?

這種情況下,可修改代碼爲:getResourceAsStream("/a.txt");   注意:這裏加了一個斜杆,表示相對classes下。沒錯,如果加了斜杆就和上面classLoader效果一樣的了,當然,classLoader是沒有前面加斜杆一說的。

代碼貼上:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到Class
        Class c = this.getClass();
        //相對於當前.class文件所在目錄
        InputStream input = c.getResourceAsStream("/a.txt");
        //讀取輸入流,轉成字符串
        String s = IOUtils.toString(input);
        System.out.println(s);
    }

以上就是獲取類路徑下的資源的兩種方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章