javaweb項目中對於資源文件的讀取

分成普通java類和servlet類 兩種情況考慮讀取資源文件

要點說明

    1:在javaweb項目中所有src下的資源在部署後都會被弄到WEB-INF/classes/下

    2:this.getServletContext().getRealPath("/");來的得到當前web應用在硬盤上的絕對路徑

    3:FileInputStream in = new FileInputStream("資源名");//如果這裏用的是相對路徑,那麼這裏是相對於服務器的虛擬機而言的。例如tomcat的/bin

    4:採用類加載方式的相對路徑是classpath,可以使用../獲取上一路徑。

具體說明

   在servlet中

      1:當資源在src下時:

            InputStream in = this.getServletContext().getResourceAsStream(“/WEB-INF/classes/資源名”);

      2:當資源在項目根目錄下的時候:InputStream in = this.getServletContext().getResourceAsStream(“/資源名”);
      3:在考慮1、2的前提下,可以通過:

            String path = this.getServletContext().getRealPath("/");//得到當前應用在服務器的絕對路徑

             FileInputStream in = new FileInputStream(path+"/資源名");//此時讀取的是資源的絕對路徑

   在普通的java類中

       說明:其實我們可以通過傳遞ServletContext對象,然後讀取資源如上,但是考慮到要降低對象之間的耦合性,所以不採取此種方法。

       解決方法(採用類加載器):

            1:類名.class.getClassLoader().getResourceAsStream("資源名");//放在src下,看要點說明第4點。此種方法存在一個缺點:在第二次調用方法讀取資源之前若資源內容發生變化,第二次讀取的內容仍然是第一次讀取的內容,因爲類加載器發現時同一個類,所以直接返回原來的資源。

            2:String path = 類名.class.getClassLoader().getResource("資源名").getPath();//通過URI形式

                   FileInputStream in = new FileInputStream(path); 


提示:在路徑中獲取資源名稱:String name = path.substring(path.lastIndexOf("\\")+1);

參考建議:方立勳的javaweb視頻

可以參考的相關鏈接:http://blog.csdn.net/origin100/article/details/5808234

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