問題J00700の解答例と解説 Java Lv.2

テキストファイルの行数のカウント(30分)


<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

テキストファイルを開いて、1行ずつ読んでいくプログラムにはいろいろな書き方があるんだけど、この解答例のようにFileReaderとBufferedReaderを使う方法がもっともポピュラーみたい。

18行目 24行目 33行目
FileReader クラスにも read メソッドがあって、読み込むことはできるんだけど、BufferedReader クラスを使った方が効率がいいよ。ファイルを開いて読み込むとき、HD(ハードディスク)にアクセスしたり、文字コードの処理をしたりするんだけど、FileReader を使うと read メソッド が呼ばれるたびに1文字ずつ、それらの処理をしたりするんだ。だけどそれはちょっと効率が悪くて遅いんだ。

BufferedReader クラスを使うと、例えば readLine が最初に呼ばれると、一度に8192文字を読み込んでバッファの中に蓄えておくんだ。つまり、最初に何行分も読んでしまうんだ。それでHDへのアクセス回数と文字コードなどの処理を一辺に済ませてしまうんだ。けれども readLine メソッドでは、最初の1行だけを返すよ。そして、もう一度readLine メソッドが呼ばれたとき、HD にはアクセスしないで、バッファの中にある2行目を返すんだ。これを繰り返して、バッファの中が空になったら、もう一度HDにアクセスしてバッファに取り込むんだ。

27行目
null というのは「空の」という意味だよ。「line が null じゃない限り、処理を繰り返す」という意味だよ。

38行目
ファイルを開いている間は、他の人がそのファイルを開いて書き換えられないようにOSがロックしているんだけど、closeすることによって、そのロックを解除するんだ。そうすると他の人がそのファイルを開いて書き込むことができるようになるよ。



<解答例 2>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

解答例1だと、例外が発生したときにファイルが正しく閉じられないまま終わってしまうことがあるよ、解答例2では、例外が発生した後でファイルを閉じようとしてみているので、より安全なプログラムになるよ。




初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録