示例代碼:
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();
}
}
}
}
}