Java 的 流操作
接觸java時間也不短了,可是對java的基礎還是很模糊,真的鬱悶,特別是對IO流方面的知識瞭解特別少.
有時候做一些應用不知道怎麼入手,比喻說上傳附件時,要求不能放在應用伺服器下面(防止應用伺服器下檔案容量太大),這樣就帶來了一個問題,要使用這個附件時應用伺服器就不能訪問到,怎麼辦呢?想了幾天最近只好選擇流操作了, 可只又不熟悉,只好找資料
下面講一個例子:
上傳附件是一張相片
xml 程式碼
- <img src="downloadImage.do" >
這個展示一張圖片,用一個Action進行用流圖片進行顯示
下面是downloadImage對應的Action程式碼
java 程式碼
- // TODO Auto-generated method stub
- HttpServletRequest request //根據你的Action得到
- HttpServletResponse response //根據你的Action得到
- ServletOutputStream out=response.getOutputStream();
- //獲取檔案
- File file=new File("C:\\Sunset.jpg");
- //這樣寫大檔案瞬間佔用記憶體
- byte[] bate=new byte[(int)file.length()];;
- FileInputStream fileStream=new FileInputStream(file);
- fileStream.read(bate,0,(int)file.length());
- out.write(bate);
下面轉載一個下載的例子:
java 程式碼
- import java.io.*;
- import java.net.*;
- import java.util.*;
- /**
- *
Title: 個人開發的API
- *
Description: 將指定的HTTP網路資源在本地以檔案形式存放
- *
Copyright: Copyright (c) 2004
- *
Company: NewSky
- * @author MagicLiao
- * @version 1.0
- */
- public class HttpGet {
- public final static boolean DEBUG = true;//除錯用
- private static int BUFFER_SIZE = 8096;//緩衝區大小
- private Vector vDownLoad = new Vector();//URL列表
- private Vector vFileList = new Vector();//下載後的儲存檔名列表
- /**
- * 構造方法
- */
- public HttpGet() {
- }
- /**
- * 清除下載列表
- */
- public void resetList() {
- vDownLoad.clear();
- vFileList.clear();
- }
- /**
- * 增加下載列表項
- *
- * @param url String
- * @param filename String
- */
- public void addItem(String url, String filename) {
- vDownLoad.add(url);
- vFileList.add(filename);
- }
- /**
- * 根據列表下載資源
- */
- public void downLoadByList() {
- String url = null;
- String filename = null;
- //按列表順序儲存資源
- for (int i = 0; i < vDownLoad.size(); i++) {
- url = (String) vDownLoad.get(i);
- filename = (String) vFileList.get(i);
- try {
- saveToFile(url, filename);
- }
- catch (IOException err) {
- if (DEBUG) {
- System.out.println("資源[" + url + "]下載失敗!!!");
- }
- }
- }
- if (DEBUG) {
- System.out.println("下載完成!!!");
- }
- }
- /**
- * 將HTTP資源另存為檔案
- *
- * @param destUrl String
- * @param fileName String
- * @throws Exception
- */
- public void saveToFile(String destUrl, String fileName) throws IOException {
- FileOutputStream fos = null;
- BufferedInputStream bis = null;
- HttpURLConnection httpUrl = null;
- URL url = null;
- byte[] buf = new byte[BUFFER_SIZE];
- int size = 0;
- //建立連結
- url = new URL(destUrl);
- httpUrl = (HttpURLConnection) url.openConnection();
- //連線指定的資源
- httpUrl.connect();
- //獲取網路輸入流
- bis = new BufferedInputStream(httpUrl.getInputStream());
- //建立檔案
- fos = new FileOutputStream(fileName);
- if (this.DEBUG)
- System.out.println("正在獲取連結[" + destUrl + "]的內容...\n將其儲存為檔案[" + fileName + "]");
- //儲存檔案
- while ( (size = bis.read(buf)) != -1)
- fos.write(buf, 0, size);
- fos.close();
- bis.close();
- httpUrl.disconnect();
- }
- /**
- * 設定代理伺服器
- *
- * @param proxy String
- * @param proxyPort String
- */
- public void setProxyServer(String proxy, String proxyPort) {
- //設定代理伺服器
- System.getProperties().put("proxySet", "true");
- System.getProperties().put("proxyHost", proxy);
- System.getProperties().put("proxyPort", proxyPort);
- }
- /**
- * 設定認證使用者名稱與密碼
- *
- * @param uid String
- * @param pwd String
- */
- public void setAuthenticator(String uid, String pwd) {
- Authenticator.setDefault(new MyAuthenticator(uid, pwd));
- }
- /**
- * 主方法(用於測試)
- *
- * @param argv String[]
- */
- public static void main(String argv[]) {
- HttpGet oInstance = new HttpGet();
- try {
- //增加下載列表(此處使用者可以寫入自己程式碼來增加下載列表)
- oInstance.addItem("http://www.ebook.com/java/網路程式設計001.zip","./網路程式設計1.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計002.zip","./網路程式設計2.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計003.zip","./網路程式設計3.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計004.zip","./網路程式設計4.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計005.zip","./網路程式設計5.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計006.zip","./網路程式設計6.zip");
- oInstance.addItem("http://www.ebook.com/java/網路程式設計007.zip","./網路程式設計7.zip");
- //開始下載
- oInstance.downLoadByList();
- }
- catch (Exception err) {
- System.out.println(err.getMessage());
- }
- }
- }
相關文章
- java的IO操作:位元組流與字元流操作Java字元
- Java IO流操作Java
- java流操作要謹慎Java
- Java Stream流操作面試題Java面試題
- java流的中間操作原始碼解析Java原始碼
- java8 Stream流操作介紹Java
- IO流下:位元組流、流操作規律(java基礎)Java
- java IO流 對檔案操作的程式碼集合Java
- Java8的stream流讓操作集合更容易Java
- Java Stream 流如何進行合併操作Java
- 流的操作(二)如何選擇流?
- 流操作
- Java8中的流操作-基本使用&效能測試Java
- Java8之Stream流(三)縮減操作Java
- Java的流Java
- 全面吃透JAVA Stream流操作,讓程式碼更加的優雅Java
- Java8 新特性 Stream流操作List集合 (二)Java
- Java的IO流Java
- 基礎篇:JAVA.Stream函式,優雅的資料流操作Java函式
- IO流之 檔案操作字元流字元
- Java流Java
- 深度掌握 Java Stream 流操作,讓你的程式碼高出一個逼格!Java
- IO流操作詳解
- IO流中的Reader讀操作
- 舊電腦更流暢的操作
- Java中的函數語言程式設計(七)流Stream的Map-Reduce操作Java函數程式設計
- Java —— 流的基本概念Java
- Java —— 流的抽象基類Java抽象
- 淺析Java的流 (轉)Java
- java的Stream流學習Java
- Java的位元組流,字元流和緩衝流對比探究Java字元
- java -IO流Java
- Java IO流Java
- java - IO流Java
- Java IO流Java
- Java IO: 流Java
- Java——IO流Java
- 面試必問的 Java 位元組流與字元流面試Java字元