【问题标题】:Why does my bufferedreader only read every second line? [duplicate]为什么我的缓冲阅读器每隔两行读取一次? [复制]
【发布时间】:2017-04-12 13:48:56
【问题描述】:

我有一个这样的缓冲阅读器:

BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

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

但它只读取每隔一行,我不明白为什么。

这是阅读器从中读取的文件:

bendsan: 1000
gotr_gotey: 87
lordelain: 87
nightbot: 87
vellsain: 87
r3l10n: 86
skalrayi: 85
brom13: 84
llecrezzef: 84
cloudinger: 74
littleangelswing: 60
n3belmacht: 43
mrscandy_: 32
sluckzz: 31
elboy717: 30
assassinenfan: 18
msurai: 18
woischdesdu: 16
daspaddy: 14
sirfullmetal: 10
daranun: 1

这是输出:

gotr_gotey: 87
nightbot: 87
r3l10n: 86
brom13: 84
cloudinger: 74
n3belmacht: 43
sluckzz: 31
assassinenfan: 18
woischdesdu: 16
sirfullmetal: 10   

如您所见,每两行都被跳过。

【问题讨论】:

  • 每个readLine 消耗一行,包括while 条件中的调用,因此您在每次迭代中执行两次,但仅打印第二次调用的结果。

标签: java list reader buffered


【解决方案1】:

因为您打印的是 br.readLine() 而不是 line,因此每次循环迭代读取 2 行(但只打印一个)。

【讨论】:

  • 哎呀我的错。这本来是可以避免的。谢谢!
【解决方案2】:
BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

    String line;
    while((line = br.readLine()) != null){ // line 1
        System.out.println(br.readLine()); // line 2
    }
    br.close();
}

第 1 行从文件中读取一行并将其存储在 line 中。然后第 2 行从文件中读取一个新行并输出它。所以第一行被读入line,然后第二行被打印出来,第三行被读入line,第四行被打印出来,以此类推。

你可能想要这个:

BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

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

【讨论】:

    【解决方案3】:

    您调用了两次readline() - 一次在while 的条件内(然后忽略结果),一次在其主体内。只需删除其中一个电话,就可以了。例如:

    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line); // Use the value of line populated in the while's condition
    }
    br.close();
    

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2023-03-28
      • 2019-07-08
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多