为什么我在 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();
}
我有一个名为 "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();
}