1. 程式人生 > >BufferedWriter 和 BufferedReader 的基本用法,附演示程式。以及一個複製文字檔案的程式

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();
	}
}