Java でテキストファイルなどのファイルを読み込みときは、BufferedReader クラスを用います。ここでは、BufferedReader を用いたファイルの読み込み方について説明します。
BufferedReader の使い方
BufferedReader でファイルを読み込むときは、以下のように記述します。
1 2 |
File f = new File("ファイル名"); BufferedReader br = new BufferedReader(new FileReader(f)); |
BufferedReader の引数には FileReader オブジェクトを指定する必要があります。また、これらのクラスを使用するときは、必要なクラスをインポートする必要があります。
1文字ずつファイルを読み込む
ファイルを読み込んだ後にその文字を取得するときは、BufferedReader クラスの read() メソッドを使用します。read() メソッドは、1文字ずつ ASCII コードを返し、すべての文字の読み込みが終了した場合は -1 を返します。
以下は、1文字ずつファイルを読み込む例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; class Sample { public static void main(String args[]) { try { File f = new File("test.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); int c = br.read(); while (c != -1) { System.out.print((char)c); c = br.read(); } br.close(); } catch (IOException e) { System.out.println(e); } } } |
BufferedReader を使用するときは、必ず例外の捕捉または宣言をする必要があります。そのため、上の例では try catch の構文を使用して IOException で例外を補足しています。文字の読み込みは while 文の部分で行い、read() がファイルの終了を示す -1 を返すまで、繰り返し文字を取り出しています。
また、read() で読み込んだ文字は ASCII コードであるため char() で文字に変換して表示しています。
最後に close メソッドを使用してファイルを解放しています。メモリリークの原因となる可能性があるので、ファイルの読み込みが終了したら必ず close() を呼び出すようにしてください。
1行ずつファイルを読み込む
1行ずつ文字を読み込むには readLine() メソッドを使用します。readLine() は、1行ずつ String 型の文字列を返し、すべての文字の読み込んだ場合は null を返します。
以下は1行ずつファイルを読み込む例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; class Sample { public static void main(String args[]) { try { File f = new File("sample.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); String line = br.readLine(); while (line != null) { System.out.println(line); line = br.readLine(); } br.close(); } catch (IOException e) { System.out.println(e); } } } |
read() メソッドを使用した場合と違い、readLine() は String 型の文字列を返すことに注意してください。そのため、while 文の終了判定には null を使用しています。こちらのときも忘れずにファイルを close() しましょう。