При использовании потоков, почему это повторяет предыдущий вывод? - PullRequest
0 голосов
/ 02 апреля 2012

Я пытался буферизовать содержимое в файле, используя BufferedReader. В процессе я дал неправильное ограничение в приведенной ниже программе while((line = in.readLine()) != "\n"), что дает мне нежелательный вывод.

Позже я исправил его как while((line = in.readLine()) != "null"), который должен иметь возможность отображать содержимое в файле (новый файл), но он продолжает показывать тот же неправильный вывод снова.

import java.io.*;

    public class ReaderTest {

        public static void main(String[] args) throws IOException{

                    BufferedReader in = new BufferedReader(new FileReader("/home/a1340/new file"));

                    String line="";
                    while((line = in.readLine()) != "\n"){
                    System.out.println(line);
                    }
                    in.close();

                  }
                }

        import java.io.*;

        public class ReaderTest {

            public static void main(String[] args) throws IOException{

                        BufferedReader in = new BufferedReader(new FileReader("/home/a1340/new file"));

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

                      }
                    }

Ответы [ 4 ]

5 голосов
/ 02 апреля 2012

readLine() возвращает ноль , когда он достигает конца потока, поэтому вам нужно сравнить с null, а не "null":

while((line = in.readLine()) != null)
0 голосов
/ 02 апреля 2012

Во-первых, как уже говорили другие, вам нужно сравнить с null.

Но также вы должны использовать .equals(...) для сравнения String объектов, а не оператора неравенства !=.

т.е. напишите это

if ("\n".equals(line)) { ... }

не это:

if ("\n" == line) { ... }

Кроме того, платформе Java известна собственная последовательность завершения строки для базовой ОС. System.getProperty("line.separator");

Некоторые платформы используют \r\n

Наконец, я предлагаю "literal".equals(variable) вместо variable.equals("literal"), потому что первое значение for будет работать, если variable равно null.

0 голосов
/ 02 апреля 2012

null не является String типом в Java

Вам нужно использовать null как есть

while((line = in.readLine()) != null)
{
     System.out.println(line);
}

Использование FileInputStream

BufferedReader in = new BufferedReader(new FileInputStream(new File("filename")));

while((line = in.readLine()) != null)
{
    System.out.println(line);
}
0 голосов
/ 02 апреля 2012

Использовать ноль без кавычек

while((line = in.readLine()) != null){
System.out.println(line);
}
...