>> Java入門トップに戻る
Javaでテキストファイルを読み込むには基本的に二つのクラスを使います。
「FileReaderクラス」と「BufferedReaderクラス」です。
テキストファイルを読み込むクラスはFileReaderクラスを使うのですが、その読み込んだテキストをバッファリングし、文字型入力ストリームを生成してテキストを効率よく読み込むために必要なクラスがBufferedReaderクラスです。
最初は意味がよくわからないと思いますが、文字型入力ストリームというものを生成して、効率よくテキストを読み込むためにBufferedReaderクラスを使うんだと思っておけば良いと思います。
それではコードを見てください。
事前にtest.txtというファイルに何か文字列を複数行書いて保存して、このJavaプロジェクトの直下に置いといて下さい。
これでFileReaderクラスのインスタンス生成は終了です。
次のBufferedReaderクラスのコンストラクタの引数には先ほど生成したFileReaderのインスタンスを指定します。
これでBufferedReaderクラスのインスンタンス生成はOKです。
この後実際にファイルの中のテキストを読んでいきますが、BufferedReaderクラスの「readLineメソッド」を使います。
1行の終端は改行 (\n) か、復帰 (\r)、または復行とそれに続く改行のいずれかで認識されます。
戻り値は読み込んだ文字列ですが、ストリームの終わりに達した場合は「null」が返ります。
戻り値の文字列には終端文字は含まれないので注意してください。
上記のコードではreadLineを実行しながら戻り値がnullになるまでwhile文でループさせて、文字列を1行ずつ表示しています。
これでファイルの終わりまで一行ずつ読み込んで表示してくれることになります。
これで文字列は読み込めましたが最後に文字型入力ストリームを閉じなければなりません。
そこでBufferedReaderクラスの「closeメソッド」を実行します。
これで全ての処理が完了です。
なお、処理全体をtry~catch文で囲んでいますが、ファイル入出力系の処理を書くとIOExceptionやFileNotFoundExceptionなどの例外が発生する可能性があるので、コンパイルエラーが出てしまいます。
なのでtry~catch文で囲んでいるというわけです。
eclipseを使っていればコンパイルする前にアイコンとかで教えてくれるのですぐ気づけると思います。
今回はreadLineメソッドを使って説明しましたが「readメソッド」というのも存在します。
これは1行ではなくて「1文字」だけ読み込むメソッドです。
戻り値は読み込んだ「1文字」を返しますが、ストリームの終わりに達した場合は「-1」が返ります。
ストリームの終わりに達した時の値がreadLineメソッドと違うので注意してください。
テキストファイルでは一行ずつ読み込む事が多いのであまり使わないかもしれませんが、頭の片隅にでも入れといてください。
>> 【テキストファイル書き込み FileWriter,BufferedWriter】に進む
>> Java入門トップに戻る
テキストファイル読み込み FileReader,BufferedReader
「FileReaderクラス」と「BufferedReaderクラス」です。
テキストファイルを読み込むクラスはFileReaderクラスを使うのですが、その読み込んだテキストをバッファリングし、文字型入力ストリームを生成してテキストを効率よく読み込むために必要なクラスがBufferedReaderクラスです。
最初は意味がよくわからないと思いますが、文字型入力ストリームというものを生成して、効率よくテキストを読み込むためにBufferedReaderクラスを使うんだと思っておけば良いと思います。
それではコードを見てください。
package file; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileTest { public static void main(String[] args) { FileReader fr = null; BufferedReader br = null; String tmp; try { // インスタンス生成 fr = new FileReader("test.txt"); // インスタンス生成 br = new BufferedReader(fr); // 一行読み込み(終端=nullじゃなければループ) while((tmp=br.readLine()) != null){ //表示 System.out.println(tmp); } } catch (Exception e){ e.printStackTrace(); } finally { try { //文字型入力ストリームを閉じる br.close(); } catch (IOException e) { e.printStackTrace(); } } } }インスタンス生成部分を見てください。
// インスタンス生成 fr = new FileReader("test.txt"); // インスタンス生成 br = new BufferedReader(fr);まずFileReaderクラスのコンストラクタの引数に読み込むファイル名を指定して、インスタンスを生成しています。
事前にtest.txtというファイルに何か文字列を複数行書いて保存して、このJavaプロジェクトの直下に置いといて下さい。
これでFileReaderクラスのインスタンス生成は終了です。
次のBufferedReaderクラスのコンストラクタの引数には先ほど生成したFileReaderのインスタンスを指定します。
これでBufferedReaderクラスのインスンタンス生成はOKです。
この後実際にファイルの中のテキストを読んでいきますが、BufferedReaderクラスの「readLineメソッド」を使います。
// 一行読み込み(終端=nullじゃなければループ) while((tmp=br.readLine()) != null){ //表示 System.out.println(tmp); }このメソッドはファイルから1行文字列を読み込んでくれます。
1行の終端は改行 (\n) か、復帰 (\r)、または復行とそれに続く改行のいずれかで認識されます。
戻り値は読み込んだ文字列ですが、ストリームの終わりに達した場合は「null」が返ります。
戻り値の文字列には終端文字は含まれないので注意してください。
上記のコードではreadLineを実行しながら戻り値がnullになるまでwhile文でループさせて、文字列を1行ずつ表示しています。
これでファイルの終わりまで一行ずつ読み込んで表示してくれることになります。
これで文字列は読み込めましたが最後に文字型入力ストリームを閉じなければなりません。
そこでBufferedReaderクラスの「closeメソッド」を実行します。
//文字型入力ストリームを閉じる br.close();このメソッドは引数がないので書いてあるようにただ実行するだけです。
これで全ての処理が完了です。
なお、処理全体をtry~catch文で囲んでいますが、ファイル入出力系の処理を書くとIOExceptionやFileNotFoundExceptionなどの例外が発生する可能性があるので、コンパイルエラーが出てしまいます。
なのでtry~catch文で囲んでいるというわけです。
eclipseを使っていればコンパイルする前にアイコンとかで教えてくれるのですぐ気づけると思います。
今回はreadLineメソッドを使って説明しましたが「readメソッド」というのも存在します。
これは1行ではなくて「1文字」だけ読み込むメソッドです。
戻り値は読み込んだ「1文字」を返しますが、ストリームの終わりに達した場合は「-1」が返ります。
ストリームの終わりに達した時の値がreadLineメソッドと違うので注意してください。
テキストファイルでは一行ずつ読み込む事が多いのであまり使わないかもしれませんが、頭の片隅にでも入れといてください。
>> 【テキストファイル書き込み FileWriter,BufferedWriter】に進む
>> Java入門トップに戻る