BufferedWriter Class

last modified: Jan./5th/2002

Reader は2バイトずつ読み込みますので、パフォーマンスに無駄があります。これを避けるために BufferedReader を用いて入力ストリームをラップしました。

Writer に関しても全く同じ問題が生じます。これを避けるために BufferedWriter クラスを用いて出力ストリームのバッファを作成します。

継承関係:

java.lang.Object
  |
  +--java.io.Writer
        |
        +--java.io.BufferedWriter

コンストラクタ:

BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)

sz は作成するバッファのサイズです。何れも Writer クラスのサブクラスから作った文字出力ストリームをラップします。

サンプル

次の例は、コマンドライン入力をファイルに出力します。

FileIO.java:

import java.io.*;

class FileIO {
	public static void main(String args[]) {
		try {
			BufferedReader br
				= new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw
				= new BufferedWriter(new FileWriter("out.txt", true));

			String str="";
			while(!str.equals("x")){
			System.out.print("行> ");
			str=br.readLine();
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
			bw.close();
		} catch (IOException e) {
			System.err.println(e);
		}
	}
}

FileWriter(String s, boolean b) は、ファイル名 s を追加出力モードで開くコンストラクタです。標準出力 System.in から入力を受け取り、指定したファイル out.txt に追加書き込みします。

newLine() メソッドは OSによって異なる改行コードを適切に出力します。 Windows ならば \r\n, UNIX ならば \n が出力されます(参照)。

メソッド

上のサンプルで使ったメソッドは BufferedWriter クラスの代表的なものなので、ここでまとめておきます:

close()
ストリームを閉じます。
flush()
ストリームをフラッシュします。
newLine()
行区切文字を書き込みます。
write(String s, int off, int len)
文字列の部分を書き込みます。 off は読み込み開始オフセットで、 len は文字数です。 s だけ与えると、文字列の全てが書き込まれます。

改行コードはシステムプロパティの line.separator で定義されています。これは環境によっては必ずしも \n ではないのですが、 newLine() によれば line.separator で定義された改行文字が書き込まれるので安心です。

次のようにして、 line.separator を確認することが出来ます:

System.out.println(System.getProperty("line.separator"));


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.