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