BufferedWriter 和 BufferedReader 的基本用法,附演示程式。以及一個複製文字檔案的程式
BufferedWriter 和 BufferedReader 為帶有預設緩衝的字元輸出輸入流,因為有緩衝區所以很效率比沒有緩衝區的很高。
一、BufferedWriter 類
構造方法:bufferedWriter bf = new bufferedWriter(Writer out );
主要方法:void write(char ch);//寫入單個字元。
void write(char []cbuf,int off,int len)//寫入字元資料的某一部分。
void write(String s,int off,int len)//寫入字串的某一部分。
void newLine()//寫入一個行分隔符。
void flush();//重新整理該流中的緩衝。將緩衝資料寫到目的檔案中去。
void close();//關閉此流,再關閉前會先重新整理他。
package Buffered; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("Buffered.txt"); // fw.write("ok168"); // fw.close(); /** * 為了提高寫入的效率,使用了字元流的緩衝區。 * 建立了一個字元寫入流的緩衝區物件,並和指定要被緩衝的流物件相關聯。 */ BufferedWriter bufw = new BufferedWriter(fw); //使用緩衝區中的方法將資料寫入到緩衝區中。 bufw.write("hello world !"); bufw.newLine(); bufw.newLine(); bufw.write("!hello world !"); bufw.write("!hello world !"); //使用緩衝區中的方法,將資料重新整理到目的地檔案中去。 bufw.flush(); //關閉緩衝區,同時關閉了fw流物件 bufw.close(); } }
二、BufferedReader類。
構造方法:BufferedReader br = new BufferReader(Reader in);
主要方法:int read();//讀取單個字元。
int read(char[] cbuf,int off,int len);//將字元讀入到陣列的某一部分。返回讀取的字元數。達到尾部 ,返回-1。
String readLine(); //讀取一個文字行。
void close(); //關閉該流。並釋放與該流相關的所有資源。
package Buffered; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("Buffered.txt"); // fw.write("ok168"); // fw.close(); /** * 為了提高寫入的效率,使用了字元流的緩衝區。 * 建立了一個字元寫入流的緩衝區物件,並和指定要被緩衝的流物件相關聯。 */ BufferedWriter bufw = new BufferedWriter(fw); //使用緩衝區中的方法將資料寫入到緩衝區中。 bufw.write("hello world !"); bufw.newLine(); bufw.newLine(); bufw.write("!hello world !"); bufw.write("!hello world !"); //使用緩衝區中的方法,將資料重新整理到目的地檔案中去。 bufw.flush(); //關閉緩衝區,同時關閉了fw流物件 bufw.close(); } }
自定義的一個myBufferedReader類。
package Buffered; import java.io.FileReader; import java.io.IOException; public class MyBufferedReader { private FileReader fr; private char []buf = new char[1024]; private int count = 0; private int pos = 0; public MyBufferedReader(FileReader f){ this.fr = f; } public int myRead() throws IOException{ if(count == 0){ count = fr.read(buf); pos = 0; } if(count<0) return -1; int ch = buf[pos++]; count--; return ch; } public String myReadLine() throws IOException{ StringBuilder sb = new StringBuilder(); int ch = 0; while ((ch = myRead()) != -1) { if (ch == '\r') continue; if (ch == '\n') return sb.toString(); sb.append((char) ch); if(count == 0) return sb.toString(); } return null; } public void myClose() throws IOException { fr.close(); } }
使用bufferedReader 和bufferWriter方法寫的一個複製文字的小程式。
package IOtest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TextCopyByBuf { /** * 首先建立讀取字元資料流物件關聯所要複製的檔案。 * 建立緩衝區物件關聯流物件。 * 從緩衝區中將字元建立並寫入到要目的檔案中。 * @throws IOException */ public static void main(String[] args) throws IOException { FileReader fr = new FileReader("C:\\demo.txt"); FileWriter fw = new FileWriter("D:\\love.txt"); BufferedReader bufr = new BufferedReader(fr); BufferedWriter bufw = new BufferedWriter(fw); //一行一行的寫。 String line = null; while((line = bufr.readLine()) != null){ bufw.write(line); bufw.newLine(); bufw.flush(); } /* 一個位元組一個位元組的寫。 int ch = 0; while((ch = bufr.read())!=-1){ bufw.write(ch); }*/ bufr.close(); bufw.close(); } }