プログラムを起動すると、テキストファイルからテキストを読み込んでTextAreaに表示する。 |
テキスト読み込みの流れ
ここでは、プログラムを起動するとloadFromFileメソッドを呼び出してテキストの読み込み処理を行っています。では、このloadFromFileメソッドの流れをざっと整理しましょう。
String fname = "text_data.txt";
FileReader reader = null;
BufferedReader breader = null;
まずは、読み込むファイル名と、ストリームを保管しておく変数名をそれぞれ用意しておきます。これは書き出し処理のときと同じですね。
try {
reader = new FileReader(fname);
breader = new BufferedReader(reader);
実際の処理は、try内で行います。この点も書き出しと同じです。まずファイル名を引数に指定してnew FileReaderし、このFileReaderインスタンスを引数に指定してnew BufferedReaderします。これでそれぞれのインスタンスが用意されました。
String result = "";
String allString = "";
while((result = breader.readLine()) != null){
allString += result + "\n";
}
area.setText(allString);
テキストの読み込みは、繰り返しを使って行います。テキストを読むメソッドはいくつかありますが、もっともよく用いられるのが「readLine」というメソッドです。これは、1行だけ(改行コードが見つかるまで)のテキストを読み込み、返します。つまり、whileの条件文にある「result = breader.readLine()」で、テキストを1行読み込み変数に収める、ということを行っていたのですね。
非常に面白いのは、この代入文は、値が読み込めない場合(つまり最後まで読み込み終わった場合)には「null」になる、という点です。つまり、繰り返し部分でこの読み込みを行い、その結果がnullになったら抜け出るようにすれば、テキストから1行ずつテキストを読み込ませることができる、というわけです。
読み込んだテキストは、別途用意しておいた変数allStringに追加していきます。ただし、readLineで読み込んだテキストは「改行コードは含まれない」という点に注意する必要があります。readLineは、改行コードまでを読み込み、改行コードの手前までのテキストを返す(改行コードそのものは取り除かれる)のです。そこで、追加する際に"\n"も付け加えて、改行されるようにしておきます。そして繰り返しを抜けたら、areaに読み込んだテキストをsetTextして表示します。
} finally {
try {
breader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
最後に、finallyでBufferedReaderの「close」を呼び出してストリームを開放すれば、作業は終了です。
いかがですか? テキストの読み込みのほうが、書き出しよりも若干面倒ですね。whileの条件部分がちょっとわかりにくいですが、実際にこれも何度か書いて動かしてみれば、働きが見えてくるはずです。ともかく、こうした定型的な処理は「実際に何度も書いて動かす」ことで次第に頭に入ってくるもの。自分で作ったプログラムにテキスト読み書きの機能を追加するなどしていろいろと使ってみてください。