東大ニート

東大卒のニートが勉強したことをメモするブログ

<Java> BufferedReaderクラスの使い方

前回のFileReaderクラスの使い方に続いて、今回はBufferedReaderクラスについて勉強します。FileReaderクラスでは1文字ずつ読み込んでいましたが、BufferedReaderクラスを使うことで、まとめて読み込むことができます。

今回もJavaDriveさんの記事を参考にさせていただきました。

www.javadrive.jp

 

BufferedReaderクラスのインスタンスを作成し、ファイル情報を渡すまで

コードは以下のようになります。

  1. import java.io.File;

  2. import java.io.FileReader;

  3. import java.io.BufferedReader;

  4. import java.io.FileNotFoundException;

  5.  

  6. public class Main {

  7.        public static void main(String args) {

  8.               try{

  9.                      File f = new File("test.txt");

  10.                      FileReader fr = new FileReader(f);

  11.                      BufferedReader br = new BufferedReader(fr);

  12.               }catch(FileNotFoundException e){

  13.                      System.out.println(e);

  14.               }

  15.        }

  16. }

 ポイント1. BufferedReaderクラスのインポート(3行目)

まず、java.ioパッケージに含まれるBufferedReaderクラスをインポートします。
「import java.io.BufferedReader;」を記述します。まとめて「import java.io.*;」でも大丈夫です。

ポイント2. BufferedReaderインスタンスの作成(11行目)

BufferedReaderインスタンスを作成し、FileReaderインスタンス「fr」を引数として渡します。

記述は「BufferedReader br = new BufferedReader(fr);」のようになります。

これでBufferedReaderインスタンス「br」にソースファイルの全入力情報が渡されます。

 

BufferedReaderインスタンスからの読み込みとclose(readLineメソッド・closeメソッド)

BufferedReaderインスタンスから文字を読み込む時は、「read」メソッドを使用することも可能ですが、「readLine」メソッドを使用することもできます。

readLineメソッドでは1行分のテキストをまとめて読み込むことができます。

以下に入力例・コード例・出力例を記載します。

入力例
AB CD
12 E
コード例
  1. import java.io.File;

  2. import java.io.FileReader;

  3. import java.io.BufferedReader;

  4. import java.io.FileNotFoundException;

  5. import java.io.IOException;

  6.  

  7. public class Main {

  8.        public static void main(String args) {

  9.               try{

  10.                      File f = new File("test.txt");

  11.                      FileReader fr = new FileReader(f);

  12.                      BufferedReader br = new BufferedReader(fr);

  13.                      String str;

  14.                      while((str = br.readLine()) != null){

  15.                             System.out.println(str);

  16.                      }

  17.                      br.close();
  18.               }catch(FileNotFoundException e){

  19.                      System.out.println(e);

  20.               }catch(IOException e){

  21.                      System.out.println(e);

  22.               }

  23.        }

  24. }

出力例
AB CD
12 E

ポイント1. readLineメソッドの使用(14行目) 

前述したようにreadLineメソッドでは文字を1行ずつまとめて読み込みます。

そのため、readLineメソッドで読み込んだ文字列を取得する時は、str型で受け取ります。

ファイルの最後まで読み込む場合、readメソッドでは「-1」が返されるまでwhileループを行いましたが、readLineメソッドでは「null」が返されるまで、となります。

ポイント2. BufferedReaderインスタンスのclose(17行目)

FileReaderインスタンスを使用した場合と同様、BufferedReaderインスタンスを使用した場合も、使い終わったら閉じておく必要があります。

「close」メソッドを使用し、「br.close();」のように記述します。

また、BufferedReaderインスタンスに対してclose処理を行えば、引数として渡されているFileReaderインスタンスも同時にclose処理が行われるため、FileReaderインスタンスに対して、close処理を記述する必要はありません。