【问题标题】:While using streams, why is it echoing the previous output?使用流时,为什么会回显先前的输出?
【发布时间】:2012-04-02 11:16:42
【问题描述】:

我试图使用 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();

                      }
                    }

【问题讨论】:

  • 去掉null周围的双引号
  • 哦是的..没有引号..问题仍然存在。我认为需要刷新缓冲区。 ??但是我很困惑怎么办??
  • 不需要冲洗伴侣。我经常用这个。可能是,问题出在FileReader,请改用FileInputStream。下面是我的答案,试试吧

标签: java flush


【解决方案1】:

readLine() returns null 到达流的末尾,所以你需要比较null,而不是"null"

while((line = in.readLine()) != null)

【讨论】:

  • sry.. 我的意思是 null 而不是“null”.. @Binyamin Sharet
  • 尝试清理并重建您的项目。
【解决方案2】:

使用不带引号的 null

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

【讨论】:

    【解决方案3】:

    首先,正如其他人所说,您需要与null进行比较。

    而且,您应该使用.equals(...) 来比较String 对象,而不是不等式运算符!=

    即写这个

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

    不是这个:

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

    此外,Java 平台通过System.getProperty("line.separator"); 知道底层操作系统的本机行终止顺序

    部分平台使用\r\n

    最后,我建议使用"literal".equals(variable) 而不是variable.equals("literal"),因为如果variablenull,第一个for 将起作用。

    【讨论】:

      【解决方案4】:

      null 不是 java 中的 String 类型

      您需要按原样使用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);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-26
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        相关资源
        最近更新 更多