鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

          這兩天做一個小東西,要求將一個文件打包到.war文件中,然后還要將這個文件從.war包中讀取出來,并在服務器硬盤上重新建一個新的文件。本來很簡單的東西,卻浪費了不少時間,寫出來,做一下筆記,同時給那些需要的朋友提供一下參考,下面是我寫的一個示例,在servlet中寫的:

          1 package com.hyq.servlets;
          2
          3 import javax.servlet.ServletException;
          4 import javax.servlet.http.HttpServletRequest;
          5 import javax.servlet.http.HttpServletResponse;
          6 import java.io.IOException;
          7 import javax.servlet.http.HttpServlet;
          8 import java.io.InputStream;
          9 import java.io. * ;
          10 import java.io.InputStreamReader;
          11 public class SystemInitServlet extends HttpServlet {
          12 private static final String CONTENT_TYPE = " text/html; charset=GBK " ;
          13 // Initialize global variables
          14 public void init() throws ServletException {
          15 java.io.InputStream stream = null ;
          16 File newFile = new java.io.File( " C:/hyq " );?? //新建一個文件目錄
          17 newFile.mkdirs();?????????????????????????????????????????? // 生成目錄
          18
          19 try {
          20 int bytesRead = 0 ;
          21
          22 javax.servlet.ServletContext context = getServletContext();
          23 stream = context.getResourceAsStream( " /hyq/hyq.cer " );
          24
          25 FileWriter tempFileWriter = new FileWriter( " C:/hyq/test.cer " );
          26
          27
          28 InputStreamReader inputd = new InputStreamReader(stream); // 這個地方一定要進行轉換
          29 Reader tempReader = inputd;
          30 char [] buffer = new char [ 8192 ];
          31
          32 try {
          33 while ((bytesRead = tempReader.read(buffer)) !=- 1 ) {
          34 tempFileWriter.write(buffer, 0 ,bytesRead); //?使用緩存讀入,不要使用 write(buffer),避免讀入空字符?
          35 }
          36 }

          37
          catch (IOException ex2) {
          38 }
          39 tempFileWriter.flush();????????????????????????????? //?記得清空緩存,否則讀入到緩存中不滿時,不會寫入文件
          40 tempFileWriter.close();??????????????????????????? //?要記得關閉
          41 inputd.close();??????????????????????????? //?要記得關閉
          42 tempReader.close();??????????????????????????? //?要記得關閉
          43
          }
          catch (Exception e) {
          44 System.err.println( " Load File failed " );
          45 }
          46 }
          47
          48 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          49 }?
          50 ?
          51 public void destroy() {
          52 }
          53
          54 }
          55
          56
          ???? 至于為什么一定要使用context.getResourceAsStream,而不使用其他的如context.getRealPath("/")等來獲

          取.war包中的文件,可以參考:http://www.aygfsteel.com/TrampEagle/archive/2006/04/20/42195.html一文,同時在測

          試過程中發現,在jsp頁面中不能直接使用這個方法,要使用application.getResourceAsStream(),但是仍然要使用InputStreamReader,進行轉換(這里要向thinkbase和lizongbo表示感謝)。如下:
          <%
          ChrBuffer=new char[10]; java.io.InputStream stream = application.getResourceAsStream("/hyq/hyq.cer"); InputStreamReader inputd = new InputStreamReader(stream);
          Reader tempReader = inputd;
          char[] buffer = new char[8192];
          int hyql = 0;
          while((hyql = tempReader.read(buffer))!=-1){
          out.write(buffer,0,hyql);
          }
          out.flush();???
          %>

          注意:一定要使用緩沖字符數組char[] ,我經過測試,如果不使用的話,只能得到一半的內容,使用緩沖

          后,才能得到全部的內容。

          如果哪位有更好的方法,還望不吝賜教!
          posted on 2006-05-08 11:41 TrampEagle 閱讀(2733) 評論(4)  編輯  收藏 所屬分類: 學習體會

          Feedback

          # re: 如何將.war包中的文件讀取到服務器硬盤 2006-05-08 13:50 thinkbase
          jsp頁面也可以的吧, context 這個東東在jsp頁面隱藏變量中好象叫 "application", 和 request/response 這些隱藏變量一樣是可以拿來就用的哦.  回復  更多評論
            

          # re: 如何將.war包中的文件讀取到服務器硬盤 2006-05-08 14:38 TrampEagle
          @thinkbase
          謝謝thinkbase,你是對的,確實在jsp中可以使用application.getResourceAsStream()來獲取文件內容的,我已經修改了原文。再次表示感謝!  回復  更多評論
            

          # re: 如何將.war包中的文件讀取到服務器硬盤 2006-05-08 14:38 lizongbo
          jsp里:

          this.getServletContext().getResourceAsStream("");

          或者:

          application.getResourceAsStream("")

            回復  更多評論
            

          # re: 如何將.war包中的文件讀取到服務器硬盤 2006-05-08 14:51 TrampEagle
          @lizongbo
          謝謝lizongbo的指點,但我測試后發現,application.getResourceAsStream("") 可以編譯通過,但是this.getServletContext().getResourceAsStream();這個方法應該應用在servlet中的,jsp中沒有this.getServletContext()這個方法,以前我就是使用這個方法出的問題,才造成誤解!但仍然非常地感謝lizongbo!
            回復  更多評論
            

          主站蜘蛛池模板: 敦煌市| 永仁县| 辽宁省| 开江县| 金门县| 安溪县| 长武县| 顺昌县| 贞丰县| 上林县| 泰顺县| 防城港市| 正镶白旗| 商洛市| 泉州市| 白玉县| 乌鲁木齐市| 板桥市| 齐齐哈尔市| 仲巴县| 桑日县| 黑水县| 金堂县| 武陟县| 惠安县| 黄骅市| 瓮安县| 丰城市| 鄂温| 萝北县| 潞城市| 隆子县| 勃利县| 贵德县| 通许县| 镇雄县| 陈巴尔虎旗| 广州市| 巴林右旗| 蒙阴县| 石阡县|