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())

两者之间有什么区别,更具体地说,具体是.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 回答