BufferedWriter Classlast 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"));