<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JavaWeb中讀取文件資源的路徑問題

        在做javaweb開發的時候,我們可能會需要從本地硬盤上讀取某一個文件資源,或者修改某一個文件,這個時候就需要先找到這個文件,然后用FileInputStrem等文件字節。字符流來將這個文件讀取到內存中,再對其進行修改等的操作。那么在找這個文件的過程中就涉及到一個路徑的問題--->怎么正確的找到這個文件呢?

      有兩種可行的方法:一、絕對硬盤路徑;二、相對路徑。。來來來,我們掰扯一下這兩種方法的不同-------

      一、硬盤絕對路徑

        如圖,我的E盤下面有個path文件夾,里面有一個1.txt的文件,,現在在Servlet中用絕對路徑讀取。

      public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
          String path = "E:\\path\\1.txt";
          File file = new File(path);
          System.out.println(file.getAbsolutePath());//輸出讀取到的文件路徑
      }
      View Code

       

       訪問這個servlet,結果讀取正常

      但是呢,這樣寫真的好嗎???我們知道,一個web應用可能會存在一個更換服務器的情況,,,如果是一個上線的項目,一旦服務器換了,那么新換的服務器會存在E:\path\1.txt這個文件路徑嗎???答案:NO,所以---絕對路徑雖然可以解決問題,但是很不利于維護及項目搬遷。

      那么,,相對路徑呢??

      二、相對路徑

        所謂行對路徑,,指的是相對于整個web應用在硬盤上的路徑來說的,,來來來,我們演示一下。。。

      首先,在我的web應用下的WenRoot下面有一個1.txt文件,,怎么讀它呢?(注意啊,web應用都是發布到tomcat的webapps下面執行的

       

      可能我們會在servlet中這樣寫路徑來讀取:

      哎哎哎,,等一下,,我要讀的是web應用下得文件啊,,你丫怎么跑到tomcat/bin下面找了!!!!(我的tomcat/bin下面可沒這個文件,,所以肯定讀取不到)

      那么,為什么會去tomcat/bin下面讀呢?這就得說說Java文件讀取的機制了:如果你直接這樣寫路徑new File("a.***");那么tomcat就會從程序啟動的地方去找這個文件(Java項目中也是如此),那么web應用是從有tomcat來執行的,,tomcat這個程序是從哪里啟動的呢??答對了,就是tomcat/bin/startuo.bat啟動的。

       

      so。。這樣寫肯定找不到的,,,那么怎么找??

      方法1、servlet中用ServlertContext域的getRealPath()這個方法找

      簡單代碼如下:

      哎,這才對嘛,,我的項目是發布到tomcat的webapps文件夾下的。。。所以是怎么一個原理呢?

      對于ServletContext().getRealPath("路徑名A");這個方法,無論你的路徑名A是什么,ServletContext().getRealPath()方法底層都會在路徑名A前拼上當前web應用的硬盤路徑,,這樣加上你傳進去的路徑就可以找成功找到了

      小結一下:其實通過ServletContext().getRealPath來拼接路徑只是絕對硬盤路徑的升級版,,,但是它好久好在計時你的web應用換了服務器環境,只要你的文件在web應用的中的相對路徑不變,那么不論你的web應用如何更換服務器環境,都能動態的獲取當前服務器環境的絕對文件路徑。

      當然,上面的getRealPath()方法只能在servlet中使用(因為只有servlet才有ServletContext域對象),在MVC模式中,很多時候servlet并不是來做處理請求的,跟多的是進行一個轉發操作,那么,如果是在servlet中調用普通的Java類來讀取文件呢???怎么讀文件?

      如果只是普通的java類,那么你也可以直接使用絕對硬盤路徑,,但同樣,服務器環境換了之后就可能會掛掉。可以通過類加載器ClassLoader類的getResource()方法來加載文件。。原理是:

      類加載器是從你的web應用的WEB-INF\class文件夾下找.class文件來加載的。所以呢,你要找的web應用中的文件只要相對于你的class文件夾找就可以了。

      來,我們try一try。。。新建一個普通的Java類PathofJava.java,

      在servlet中調用這個類的method()方法,訪問一下這個servlet---

      所以正確的方法是用類加載器去找:

      為什么要用../../1.txt呢?因為1.txt做i中發布到tomcat中web應用下去了,跟index.jsp平級,所以用../(表示上級目錄)來找

      小結一下:其實類加載器也是搞出來一個絕對硬盤路徑來找文件的,只是這個絕對路徑是隨著web應用的路徑變化而變化的,就不存在web應用換了服務器環境找不到資源的問題了

      附上整個test項目的結構

      posted @ 2015-04-30 11:47  Buffalo_L  閱讀(36098)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 国产亚洲精品日韩av在| 国色天香成人一区二区| 国产成人综合欧美精品久久| 日本免费视频| 国产成人亚洲综合91精品| 日本欧美大码a在线观看| 国产精品无码久久久久| 草草浮力影院| av天堂亚洲天堂亚洲天堂| 精品亚洲无人区一区二区| 亚洲美免无码中文字幕在线| 欧美牲交a欧美牲交aⅴ免费真| 亚洲日韩久热中文字幕| 欧美老熟妇又粗又大| 熟妇人妻任你躁在线视频| 在线观看精品日本一区二| av大片| 未满十八18禁止免费无码网站 | 亚洲精品亚洲人成人网| 亚洲一区二区三区在线激情| 免费国产一级 片内射老| 亚洲理论在线A中文字幕| 丰满的少妇一区二区三区| 亚洲gay片在线gv网站| 深夜福利视频在线播放| 国产成人精品性色av麻豆| 精品无码一区在线观看| 一个色综合国产色综合| 香蕉乱码成人久久天堂爱| 老男人久久青草av高清| 久久精品国产99国产精品严洲 | 国产成人精品日本亚洲专区6| 99精品国产综合久久久久五月天| 成人污视频| 久热这里只有精品6| 婷婷久久香蕉五月综合加勒比| 久久久久人妻精品一区三寸| 亚洲人成人无码网WWW电影首页| 精品国产迷系列在线观看| 福利一区二区1000| 国产九九视频一区二区三区 |