Ниже два разных кода дает мне два разных вывода в Java - PullRequest
0 голосов
/ 17 мая 2019

Посмотрите два приведенных ниже кода и дайте мне знать, почему он печатает так, что это язык Java

BufferedReader br = new BufferedReader(new FileReader("file path"));
while(br.readLine()!= null) {
    System.out.println(br.readLine());
}
br.close();

Этот код не печатает полное содержимое файла, однако, если я использую приведенный ниже код, он печатает полностьюсодержимое файла .. пожалуйста, объясните

BufferedReader br = new BufferedReader(new FileReader("filepath"));
String str;
while((str=br.readLine())!= null) {
    System.out.println(str);
}
br.close();

Ответы [ 2 ]

6 голосов
/ 17 мая 2019

Простой: вы дважды читаете строки из BufferedReader, дважды вызывая br.readLine() в цикле while. Сначала в условной части (while (br.readLine()!=null)) читается строка, а затем снова ее выводится (...println(br.readLine())).

Строка, которая читается, ушла из буфера.

Во второй части кода строка сохраняется в str в части условия. Это str позже также используется для печати строки.

2 голосов
/ 17 мая 2019

Вы читаете строку дважды, используя br.readLine() в первом коде, сначала в состоянии условия, а затем в System.out.println(br.readLine()), поэтому он всегда печатает 2,4,6,8... строк, а во втором коде вы читаете один раз и сохраняете его в переменной strи печать str, что приводит к печати всего файла.

...