Java 为什么';这不是我的BufferedReader,它可以边读边读=无效工作?
我有一个名为Java 为什么';这不是我的BufferedReader,它可以边读边读=无效工作?,java,io,bufferedreader,readline,reader,Java,Io,Bufferedreader,Readline,Reader,我有一个名为“a.txt”的文件,里面有以下数据: A B C D 运行此代码时,会得到意外的结果: BufferedReader bufferedReader = new BufferedReader (new FileReader ("a.txt")); while (true) { System.out.println ("start"); while (bufferedReader.readLine () != null) {
“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();
}