BufferedReader/BufferedWriterクラス
バッファリング処理 – BufferedReader/BufferedWriterクラス- BufferedReader(Reader in [,int sz])
- BufferedWriter(Writer out [,int sz])
- in:入力ストリーム
- out:出力ストリーム
- out:出力ストリーム
バッファリング処理とは、書き込み時であればデータを一旦メモリー(バッファ)に蓄積し、いっぱいになったところでファイルに出力することを言います。読み込み時であればバッファにまとめてデータを読み込み、いっぱいになったところでデータを処理します。いずれの場合もデータをまとめて処理できるので、読み書きを効率化できます。
このようなバッファリングを担うのが、BufferedReader/BufferedWriterクラスの役割です。BufferedReader/BufferedWriterクラスを利用するには、コンストラクターに対してもととなるReader/Writerオブジェクトを渡すだけです。
BufferedReader/BufferedWriterクラスで利用できるメソッドには、以下のようなものがあります。
Period/Durationクラスの主なメソッド | ||
---|---|---|
クラス | メソッド | 概要 |
BufferedReader | int read([char[] c [,int off, int len]]) | 入力ストリームから文字配列cに読み込み (offは開始位置、lenは読み込み長) |
String readLine() | 行を読み込み | |
long skip(long n) | 文字の読み込みをスキップ | |
void close() | ストリームを閉じる | |
BufferedWriter | void write(char[] cbuf [,int off, int len]) | 文字配列cの内容を出力ストリームに書き出し (offは開始位置、lenは読み込み長) |
void write(String s [,int off, int len]) | 文字列sの内容を出力ストリームに書き出し (offは開始位置、lenは読み込み長) |
|
void newLine() | 改行文字を書き込み | |
void close() | ストリームを閉じる | |
void flush() | 出力をフラッシュ |
以下は、テキストファイルsample.txtの内容をsample2.txtに転記する例です。
StreamBuffer.java
package com.example.mynavi.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class StreamBuffer { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream("C:/data/sample.txt"), "UTF-8")); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream("C:/data/sample2.txt"), "UTF-8"))) { String line; while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); } } catch (IOException e) { e.printStackTrace(); } } }
BufferedReaderクラスでは、readLineメソッドを利用することで、テキストを(1文字単位)ではなく、1行単位で読み込めます。
また、readLineメソッドは次の行がない場合にnullを返します。そこでサンプルでも、readLineメソッドの戻り値がfalseになったタイミングで、whileループを終了しています。