公開:

BufferedReaderとは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


BufferedReaderとは

BufferedReaderはJavaで提供されている入力ストリームを読み込むためのクラスの一つです。BufferedReaderを使用することで、ファイルやコンソールからテキストデータを効率的に読み込むことができます。

BufferedReaderの特徴はバッファリング機能を持っていることです。バッファリングとは一時的にデータを保持しておく仕組みのことを指します。BufferedReaderは内部的にバッファを持ち、ある程度まとまった量のデータを一度に読み込んでおくことで、読み込み処理の効率化を図っています。

BufferedReaderを使用する際はFileReaderやInputStreamReaderなどの他の入力ストリームを組み合わせて使用します。例えば、FileReaderを使ってファイルからデータを読み込み、そのデータをBufferedReaderに渡すことで、ファイルからのテキストデータの読み込みを効率的に行えるのです。

BufferedReaderにはreadLine()というメソッドが用意されています。このメソッドを使用することで、テキストデータを一行ずつ読み込むことができます。readLine()は改行文字までを一行として認識し、その行の文字列を返してくれるのです。

BufferedReaderを使い終わった後はclose()メソッドを呼び出してリソースを解放する必要があります。これにより、メモリリークなどの問題を防ぐことができるでしょう。

BufferedReaderを使ったテキストファイルの読み込み方法

BufferedReaderを使ったテキストファイルの読み込み方法に関して、以下3つを簡単に解説していきます。

  • BufferedReaderとFileReaderの組み合わせ
  • BufferedReaderを使った一行ずつの読み込み
  • BufferedReaderのリソース解放

BufferedReaderとFileReaderの組み合わせ

BufferedReaderを使ってテキストファイルを読み込む際はFileReaderと組み合わせて使用します。FileReaderはファイルからデータを読み込むためのクラスです。FileReaderをBufferedReaderのコンストラクタに渡すことで、ファイルからのデータ読み込みを効率的に行えます。

以下はBufferedReaderとFileReaderを使ってテキストファイルを読み込むサンプルコードです。ファイルパスを指定してFileReaderを作成し、それをBufferedReaderのコンストラクタに渡しています。これにより、指定したファイルからデータを読み込む準備が整います。

String filePath = "sample.txt";
FileReader fr = new FileReader(filePath);
BufferedReader br = new BufferedReader(fr);

BufferedReaderを使った一行ずつの読み込み

BufferedReaderを使ってテキストファイルを読み込む際はreadLine()メソッドを使用して一行ずつ読み込むことができます。readLine()は改行文字までを一行として認識し、その行の文字列を返します。読み込む行がなくなるまで、readLine()を繰り返し呼び出すことで、ファイルの内容を順次処理できます。

以下はBufferedReaderを使って一行ずつ読み込むサンプルコードです。readLine()が null を返すまで、while文で繰り返し処理を行っています。読み込んだ一行はline変数に格納され、その内容を任意の処理で利用できます。

String line;
while ((line = br.readLine()) != null) {
    // 読み込んだ一行に対する処理
    System.out.println(line);
}

BufferedReaderのリソース解放

BufferedReaderの使用が終わったら、close()メソッドを呼び出してリソースを解放する必要があります。リソースの解放を怠ると、メモリリークなどの問題につながる可能性があります。close()メソッドはBufferedReaderが内部的に使用しているバッファやファイルストリームを適切に閉じてくれます。

以下はBufferedReaderのリソース解放を行うサンプルコードです。try-with-resources文を使用することで、BufferedReaderのclose()メソッドを自動的に呼び出すことができます。これにより、リソースの解放忘れを防ぐことができるでしょう。

try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
    // BufferedReaderを使った処理
} catch (IOException e) {
    e.printStackTrace();
}

BufferedReaderのメソッドと使い方

BufferedReaderのメソッドと使い方に関して、以下3つを簡単に解説していきます。

  • readLine()メソッドによる一行ずつの読み込み
  • read()メソッドによる文字単位の読み込み
  • mark()とreset()メソッドによる読み込み位置の操作

readLine()メソッドによる一行ずつの読み込み

BufferedReaderの代表的なメソッドの一つが、readLine()メソッドです。このメソッドはテキストデータを一行ずつ読み込むために使用します。readLine()は改行文字までを一行として認識し、その行の文字列を返してくれます。

readLine()メソッドは読み込む行がなくなるまで呼び出すことができます。通常はwhile文などを使ってreadLine()が null を返すまで繰り返し処理を行います。これにより、テキストファイルの内容を順次読み込んで処理することができるのです。

String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

read()メソッドによる文字単位の読み込み

BufferedReaderにはread()メソッドも用意されています。read()メソッドはテキストデータを文字単位で読み込むために使用します。read()は一文字ずつintとして返してくれます。

read()メソッドを使う場合はwhile文などを使って、read()が-1を返すまで繰り返し処理を行います。読み込んだ文字をchar型にキャストすることで、文字として扱うことができます。ただし、一文字ずつの読み込みは効率が悪いため、通常はreadLine()を使用することが多いでしょう。

int ch;
while ((ch = br.read()) != -1) {
    char c = (char) ch;
    System.out.print(c);
}

mark()とreset()メソッドによる読み込み位置の操作

BufferedReaderにはmark()とreset()というメソッドも用意されています。これらのメソッドは読み込み位置を操作するために使用します。mark()メソッドは現在の読み込み位置にマークを設定し、reset()メソッドを呼び出すことで、マークした位置に読み込み位置を戻すことができます。

mark()メソッドを呼び出す際はreadAheadLimit引数で、マークした位置から先に読み込める最大文字数を指定します。reset()メソッドを呼び出すと、直前にマークした位置に読み込み位置が戻ります。ただし、mark()とreset()はあまり頻繁に使われるメソッドではありません。

br.mark(100);
// 読み込み処理
br.reset();

BufferedReaderを使用する際の注意点

BufferedReaderを使用する際の注意点に関して、以下3つを簡単に解説していきます。

  • ファイルが存在しない場合の例外処理
  • 入出力エラーに対する例外処理
  • リソースの解放漏れに注意

ファイルが存在しない場合の例外処理

BufferedReaderを使ってファイルからデータを読み込む際は指定したファイルが存在しない場合に備えて例外処理を行う必要があります。FileReaderのコンストラクタはファイルが見つからない場合にFileNotFoundExceptionをスローします。この例外をtry-catch文でキャッチし、適切なエラーメッセージを表示するなどの処理を行いましょう。

以下はファイルが存在しない場合の例外処理の例です。FileNotFoundExceptionをキャッチし、エラーメッセージを出力しています。ファイルパスが正しいかどうかを確認し、必要に応じてユーザーに再入力を促すなどの処理を追加することもできます。

try {
    FileReader fr = new FileReader("sample.txt");
    BufferedReader br = new BufferedReader(fr);
    // 読み込み処理
} catch (FileNotFoundException e) {
    System.out.println("ファイルが見つかりません: " + e.getMessage());
}

入出力エラーに対する例外処理

BufferedReaderを使ってデータを読み込む際は入出力エラーが発生する可能性があります。例えば、ファイルへのアクセス権限がない場合や、ファイルが途中で破損している場合などです。これらのエラーに対しても、適切な例外処理を行う必要があります。

入出力エラーに対する例外処理はIOExceptionをキャッチすることで行います。IOExceptionは入出力に関する一般的な例外クラスであり、ファイルアクセスエラーなどを含みます。例外が発生した場合はエラーメッセージを出力するなどの処理を行いましょう。

try {
    FileReader fr = new FileReader("sample.txt");
    BufferedReader br = new BufferedReader(fr);
    // 読み込み処理
} catch (IOException e) {
    System.out.println("入出力エラーが発生しました: " + e.getMessage());
}

リソースの解放漏れに注意

BufferedReaderを使い終わった後は必ずclose()メソッドを呼び出してリソースを解放する必要があります。リソースの解放を怠ると、メモリリークやファイルがロックされたままになるなどの問題が発生する可能性があります。

リソースの解放漏れを防ぐためにはtry-with-resources文を使用するのが効果的です。try-with-resources文を使うと、try文の括弧内で宣言されたリソースは自動的にclose()メソッドが呼び出されます。これにより、明示的にclose()を呼び出す必要がなくなり、リソースの解放忘れを防ぐことができます。

try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
    // 読み込み処理
} catch (IOException e) {
    System.out.println("入出力エラーが発生しました: " + e.getMessage());
}

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「コンピュータ」に関するコラム一覧「コンピュータ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。