为什么我在 readLine!=null 时读取的 BufferedReader 不起作用?

Why doesn't my BufferedReader that reads while readLine!=null work?

我有一个名为 "a.txt" 文件,其中我有以下数据:

A
B
C
D

当我运行这段代码时,我得到了意想不到的结果:

BufferedReader bufferedReader = new BufferedReader (new FileReader ("a.txt"));
while (true) {
    System.out.println ("start");
    while (bufferedReader.readLine () != null) {
        System.out.println (bufferedReader.readLine ());
    }
    Thread.sleep (1000);
}

输出:

start
B
D
start
start
start
//keeps printing start

我所期望的当然是:

start
A
B
C
D
start
start
//keeps printing start

有谁知道可能是什么问题?这真的让我感到震惊,因为当我第一次看到它时看起来很简单。

bufferedReader.readLine () 读取下一行,你调用它两次

对于循环的每次(成功)迭代,您将读取两行 - 一行在 while 条件中,另一行在循环体中。循环条件中读取的行被丢弃,因此您会看到丢失的行。

相反,您可以将行存储在循环条件的变量中,然后在循环体中使用它:

String line;
while ((line = bufferedReader.readLine()) != null) {
    System.out.println(line);
}

您调用了 bufferedReader.readLine () 两次,而您应该调用一次。如下操作:

String line = bufferedReader.readLine();
while (line != null) {
    System.out.println(line);
    line = bufferedReader.readLine();
}