Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';这不是我的BufferedReader,它可以边读边读=无效工作?_Java_Io_Bufferedreader_Readline_Reader - Fatal编程技术网

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