天天看點

Java IO流->處理流->緩沖流->位元組流&字元流

示例代碼:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

/**
 * 1.流的分類:
 * 按照資料流向的不同:輸入流	輸出流
 * 按照處理資料的機關不同:位元組流 (不能進行中文,一個中文由兩個位元組組成)	字元流(處理文本檔案)
 * 按照角色的不同:節點流(直接作用于檔案)	處理流
 * 2.IO體系:
 * 抽象基類			節點流				緩沖流(處理流的一種,可以提高檔案處理的效率)
 * InputStream		FileInputStream		BufferedInputStream
 * OutputStream		FileOutputStream	BufferedOutputStream	(flush())
 * Reader			FileReader			BufferedReader			(readLine())
 * Writer			FileWriter			BufferedWriter			(flush())
 *
 */

public class TestBuffered {
	//使用BufferedInputStream和BufferedOutputStream實作非文本檔案的複制
	@Test
	public void test1() {
		//3.将建立的具體的節點流對象作為形參傳遞給緩沖流的構造器
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			//1.提供讀入和寫出的檔案
			File file1 = new File("1.jpg");
			File file2 = new File("2.jpg");
			//2.先建立相應的節點流:FileInputStream和FileOutputStream
			FileInputStream fis = new FileInputStream(file1);
			FileOutputStream fos = new FileOutputStream(file2);
			bis = new BufferedInputStream(fis);
			bos = new BufferedOutputStream(fos);
			//4.具體的實作檔案複制的操作
			byte[] b = new byte[1024];
			int len;
			while((len = bis.read(b)) != -1) {
				bos.write(b, 0, len);
				bos.flush();//最後一次寫緩存可能存不滿,把緩存清空
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(bos != null) {
				try {
					bos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(bis != null) {
				try {
					bis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	@Test
	public void test2() {
		BufferedReader br = null;
		BufferedWriter bw = null;
		try {
			File file = new File("hello.txt");
			File newfile = new File("newfile.txt");
			FileReader fr = new FileReader(file);
			FileWriter fw = new FileWriter(newfile);
			br = new BufferedReader(fr);
			bw = new BufferedWriter(fw);
			
			/*
			 * 輸出到控制台
			 */
			//方法一:
			/*char[] c = new char[1024];
			int len;
			while((len = br.read(c)) != -1) {
				System.out.println(new String(c, 0, len));
			}*/
			//方法二:
			/*String str;
			while((str = br.readLine()) != null) {
				System.out.println(str);
			}*/
			
			/*
			 * 輸出到檔案
			 */
			String str2;
			while((str2 = br.readLine()) != null) {
				bw.write(str2);
				bw.newLine();//換行,也可以str2+"\n"
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}