1

前の質問で、ファイルのループに関する問題について質問し、それを解決しました。しかし、このメソッドが最後の行/レコードのセットを読み取れなかったことに気づきました。そこで、元のforループをに変更しましたwhile(reader.ready())。それで:

forのループ:

     int numberOfLines = readLines();
     numberOfLines = numberOfLines / 6;

     for(int i=0;i < numberOfLines; i++)

これを次のように変更しました:

BufferedReader reader = new BufferedReader(new FileReader("test.dat"));

while(reader.ready())

2つの違いは何ですか、もう少し具体的には、正確には何をし.ready()ますか?

4

1 に答える 1

2

Javadocから:

このストリームを読み取る準備ができているかどうかを示します。バッファが空でない場合、または基になる文字ストリームの準備ができている場合、バッファリングされた文字ストリームの準備ができています。

戻り値:
次のread()が入力をブロックしないことが保証されている場合はtrue、それ以外の場合はfalse。falseを返すことは、次の読み取りがブロックされることを保証しないことに注意してください。

したがって、バッファはブロックされないことが保証されているready場合になります。read

JB Nizetが指摘しているように、これは必ずしもファイルの終わりに到達したことを意味するわけではありません。何らかの理由でストリームブロックされる可能性がある場合は、readyを返しfalseます。

代わりに、次のようにファイルを読み取ってみてください。

String line = reader.readLine();
while (line != null) {
    // code code code
    line = reader.readLine();
}
于 2013-03-10T18:21:08.353 に答える