Почему мой буферный читатель читает только каждую вторую строку?
У меня есть буферизованный читатель, как это:
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
как видите, каждая вторая строка пропущена.
3 ответа
Потому что ты печатаешь br.readLine()
вместо line
поэтому, читая 2 строки за каждую итерацию цикла (но печатая только одну).
Ты звонишь 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();
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();
}