問題J00702の解答例と解説 Java Lv.2
テキストファイルの1行目の読み取り(30分)
<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
テキストファイルを開いて、中を読むプログラムにはいろいろな書き方があるんだけど、この解答例のようにFileReaderとBufferedReaderを使う方法がもっともポピュラーみたい。
FileReader クラスにも read メソッドがあって、このクラスだけでも読むことはできるんだけど、BufferedReader クラスを使った方が効率がいいよ。ファイルを開いて読み込むとき、HD(ハードディスク)にアクセスしたり、文字コードの処理をしたりするんだけど、FileReader を使うと read メソッド が呼ばれるたびに1文字ずつ、それらの処理をしたりするんだ。だけどそれはちょっと効率が悪くて遅いんだ。
BufferedReader クラスを使うと、例えば readLine が最初に呼ばれると、一度に8192文字を読み込んでバッファの中に蓄えておくんだ。つまり、最初に何行分も読んでしまうんだ。それでHDへのアクセス回数と文字コードなどの処理を一辺に済ませてしまうんだ。けれども readLine メソッドの戻り値は、最初の1行だけを返すよ。そして、もう一度readLine メソッドが呼ばれたとき、HD にはアクセスしないで、バッファの中にある2行目を返すんだ。これを繰り返して、バッファの中が空になったら、もう一度HDにアクセスしてバッファに取り込むんだ。FileReader と BufferedReader の詳細は、教科書や web で良く調べておこう。
20行目
null というのは「空の」という意味だよ。空文字 "" とは違う値だよ。
25行目
ファイルを開いている間は、他の人がそのファイルを開いて書き換えられないようにOSがロックしているんだけど、closeすることによって、そのロックを解除するんだ。そうすると他の人がそのファイルを開いて書き込むことができるようになるよ。
FileReader クラスにも read メソッドがあって、このクラスだけでも読むことはできるんだけど、BufferedReader クラスを使った方が効率がいいよ。ファイルを開いて読み込むとき、HD(ハードディスク)にアクセスしたり、文字コードの処理をしたりするんだけど、FileReader を使うと read メソッド が呼ばれるたびに1文字ずつ、それらの処理をしたりするんだ。だけどそれはちょっと効率が悪くて遅いんだ。
BufferedReader クラスを使うと、例えば readLine が最初に呼ばれると、一度に8192文字を読み込んでバッファの中に蓄えておくんだ。つまり、最初に何行分も読んでしまうんだ。それでHDへのアクセス回数と文字コードなどの処理を一辺に済ませてしまうんだ。けれども readLine メソッドの戻り値は、最初の1行だけを返すよ。そして、もう一度readLine メソッドが呼ばれたとき、HD にはアクセスしないで、バッファの中にある2行目を返すんだ。これを繰り返して、バッファの中が空になったら、もう一度HDにアクセスしてバッファに取り込むんだ。FileReader と BufferedReader の詳細は、教科書や web で良く調べておこう。
20行目
null というのは「空の」という意味だよ。空文字 "" とは違う値だよ。
25行目
ファイルを開いている間は、他の人がそのファイルを開いて書き換えられないようにOSがロックしているんだけど、closeすることによって、そのロックを解除するんだ。そうすると他の人がそのファイルを開いて書き込むことができるようになるよ。
<解答例 2>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
解答例1だと、例外が発生したときにファイルが正しく閉じられないまま終わってしまうことがあるよ、解答例2では、例外が発生した後でファイルを閉じようとしてみているので、より安全なプログラムになるよ。
初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録
新規登録