Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

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ループを終了しています。

ストリーム
ストリーム
FileInputStream/FileOutputStreamクラス
InputStreamReader/OutputStreamWriterクラス
BufferedReader/BufferedWriterクラス
ObjectInputStream/ObjectOutputStreamクラス
Fileクラス

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職