Java 的 流操作

liuzongan1985發表於2007-12-08

接觸java時間也不短了,可是對java的基礎還是很模糊,真的鬱悶,特別是對IO流方面的知識瞭解特別少.

有時候做一些應用不知道怎麼入手,比喻說上傳附件時,要求不能放在應用伺服器下面(防止應用伺服器下檔案容量太大),這樣就帶來了一個問題,要使用這個附件時應用伺服器就不能訪問到,怎麼辦呢?想了幾天最近只好選擇流操作了, 可只又不熟悉,只好找資料

下面講一個例子:

上傳附件是一張相片

xml 程式碼
  1. <img src="downloadImage.do" >  

這個展示一張圖片,用一個Action進行用流圖片進行顯示

下面是downloadImage對應的Action程式碼

java 程式碼
  1. // TODO Auto-generated method stub       
  2.         HttpServletRequest request     //根據你的Action得到  
  3.         HttpServletResponse response   //根據你的Action得到       
  4.             
  5.            ServletOutputStream out=response.getOutputStream();       
  6.          
  7.         //獲取檔案      
  8.         File file=new File("C:\\Sunset.jpg");       
  9.        
  10.         //這樣寫大檔案瞬間佔用記憶體
  11.         byte[] bate=new byte[(int)file.length()];;       
  12.  
  13.         FileInputStream fileStream=new FileInputStream(file);       
  14.         fileStream.read(bate,0,(int)file.length());       
  15.         out.write(bate);     

 下面轉載一個下載的例子:

java 程式碼
  1. import java.io.*;   
  2. import java.net.*;   
  3. import java.util.*;   
  4.   
  5. /**  
  6.  * 

    Title: 個人開發的API

     
  7.  * 

    Description: 將指定的HTTP網路資源在本地以檔案形式存放

     
  8.  * 

    Copyright: Copyright (c) 2004

     
  9.  * 

    Company: NewSky

     
  10.  * @author MagicLiao  
  11.  * @version 1.0  
  12.  */  
  13. public class HttpGet {   
  14.   
  15.   public final static boolean DEBUG = true;//除錯用   
  16.   private static int BUFFER_SIZE = 8096;//緩衝區大小   
  17.   private Vector vDownLoad = new Vector();//URL列表   
  18.   private Vector vFileList = new Vector();//下載後的儲存檔名列表   
  19.   
  20.   /**  
  21.    * 構造方法  
  22.    */  
  23.   public HttpGet() {   
  24.   
  25.   }   
  26.   
  27.   /**  
  28.    * 清除下載列表  
  29.    */  
  30.   public void resetList() {   
  31.     vDownLoad.clear();   
  32.     vFileList.clear();   
  33.   }   
  34.   
  35.   /**  
  36.    * 增加下載列表項  
  37.    *  
  38.    * @param url String  
  39.    * @param filename String  
  40.    */  
  41.   public void addItem(String url, String filename) {   
  42.     vDownLoad.add(url);   
  43.     vFileList.add(filename);   
  44.   }   
  45.   
  46.   /**  
  47.    * 根據列表下載資源  
  48.    */  
  49.   public void downLoadByList() {   
  50.     String url = null;   
  51.     String filename = null;   
  52.        
  53.     //按列表順序儲存資源   
  54.     for (int i = 0; i < vDownLoad.size(); i++) {   
  55.       url = (String) vDownLoad.get(i);   
  56.       filename = (String) vFileList.get(i);   
  57.   
  58.       try {   
  59.         saveToFile(url, filename);   
  60.       }   
  61.       catch (IOException err) {   
  62.         if (DEBUG) {   
  63.           System.out.println("資源[" + url + "]下載失敗!!!");   
  64.         }   
  65.       }   
  66.     }   
  67.   
  68.     if (DEBUG) {   
  69.       System.out.println("下載完成!!!");   
  70.   
  71.     }   
  72.   }   
  73.   
  74.   /**  
  75.    * 將HTTP資源另存為檔案  
  76.    *  
  77.    * @param destUrl String  
  78.    * @param fileName String  
  79.    * @throws Exception  
  80.    */  
  81.   public void saveToFile(String destUrl, String fileName) throws IOException {   
  82.     FileOutputStream fos = null;   
  83.     BufferedInputStream bis = null;   
  84.     HttpURLConnection httpUrl = null;   
  85.     URL url = null;   
  86.     byte[] buf = new byte[BUFFER_SIZE];   
  87.     int size = 0;   
  88.        
  89.     //建立連結   
  90.     url = new URL(destUrl);   
  91.     httpUrl = (HttpURLConnection) url.openConnection();   
  92.     //連線指定的資源   
  93.     httpUrl.connect();   
  94.     //獲取網路輸入流   
  95.     bis = new BufferedInputStream(httpUrl.getInputStream());   
  96.     //建立檔案   
  97.     fos = new FileOutputStream(fileName);   
  98.   
  99.     if (this.DEBUG)    
  100. System.out.println("正在獲取連結[" + destUrl + "]的內容...\n將其儲存為檔案[" + fileName + "]");   
  101.   
  102.     //儲存檔案   
  103.     while ( (size = bis.read(buf)) != -1)    
  104.       fos.write(buf, 0, size);   
  105.        
  106.     fos.close();   
  107.     bis.close();   
  108.     httpUrl.disconnect();   
  109.   }   
  110.   
  111.   /**  
  112.    * 設定代理伺服器  
  113.    *  
  114.    * @param proxy String  
  115.    * @param proxyPort String  
  116.    */  
  117.   public void setProxyServer(String proxy, String proxyPort) {   
  118.     //設定代理伺服器   
  119.     System.getProperties().put("proxySet""true");   
  120.     System.getProperties().put("proxyHost", proxy);   
  121.     System.getProperties().put("proxyPort", proxyPort);   
  122.   
  123.   }   
  124.   
  125.   /**  
  126.    * 設定認證使用者名稱與密碼  
  127.    *  
  128.    * @param uid String  
  129.    * @param pwd String  
  130.    */  
  131.   public void setAuthenticator(String uid, String pwd) {   
  132.     Authenticator.setDefault(new MyAuthenticator(uid, pwd));   
  133.   }   
  134.   
  135.   /**  
  136.    * 主方法(用於測試)  
  137.    *  
  138.    * @param argv String[]  
  139.    */  
  140.   public static void main(String argv[]) {   
  141.   
  142.     HttpGet oInstance = new HttpGet();   
  143. try {   
  144. //增加下載列表(此處使用者可以寫入自己程式碼來增加下載列表)   
  145. oInstance.addItem("http://www.ebook.com/java/網路程式設計001.zip","./網路程式設計1.zip");   
  146. oInstance.addItem("http://www.ebook.com/java/網路程式設計002.zip","./網路程式設計2.zip");   
  147. oInstance.addItem("http://www.ebook.com/java/網路程式設計003.zip","./網路程式設計3.zip");   
  148. oInstance.addItem("http://www.ebook.com/java/網路程式設計004.zip","./網路程式設計4.zip");   
  149. oInstance.addItem("http://www.ebook.com/java/網路程式設計005.zip","./網路程式設計5.zip");   
  150. oInstance.addItem("http://www.ebook.com/java/網路程式設計006.zip","./網路程式設計6.zip");   
  151. oInstance.addItem("http://www.ebook.com/java/網路程式設計007.zip","./網路程式設計7.zip");   
  152. //開始下載   
  153. oInstance.downLoadByList();   
  154.     }   
  155.     catch (Exception err) {   
  156.       System.out.println(err.getMessage());   
  157.     }   
  158.   
  159.   }   
  160.   
  161. }   
  162.   

相關文章