鷹翔宇空

          學習和生活

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

          公告

          歡迎和大家成為朋友!
          歡迎和大家就任何技術進行交流!
          QQ:77542728
          MSN:hnlyhyq@hotmail.com
          Email:hnlyhyq@163.com

          常用鏈接

          留言簿(16)

          隨筆分類(107)

          隨筆檔案(109)

          文章分類(145)

          文章檔案(141)

          收藏夾(22)

          java

          javascript

          jdbc

          web

          其它

          開源項目

          我的好友

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          這兩天做一個小東西,要求將一個文件打包到.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 閱讀(2731) 評論(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!
            回復  更多評論
            

          主站蜘蛛池模板: 安徽省| 家居| 青铜峡市| 古交市| 北宁市| 东乌| 光山县| 土默特右旗| 神池县| 文山县| 通榆县| 格尔木市| 乐平市| 韶山市| 冕宁县| 汉寿县| 重庆市| 宁蒗| 清涧县| 英吉沙县| 古交市| 长宁县| 洛扎县| 惠东县| 东宁县| 都安| 始兴县| 隆尧县| 石阡县| 讷河市| 江门市| 夏河县| 荥阳市| 大悟县| 娱乐| 汉源县| 蒙自县| 二手房| 山东| 鸡西市| 淮南市|