BufferedWriter没有写任何文件

时间:2013-10-01 18:01:25

标签: java

我正在读取文件in.txt并将数字写入文件out.txt,直到找到42.但是在out.txt中我得到空白文件。相反,如果我写System.out.println(num)而不是out.write(num)我得到了正确的结果。这意味着问题出在BufferedReader的声明中。我错了吗?

import java.io。*;

class Numbers
{
    public static void main(String args[])
    {
        try{
                    String num;
                    BufferedReader in=new BufferedReader(new FileReader("in.txt"));
                    BufferedWriter out=new BufferedWriter(new FileWriter("out.txt"));

                    while((num=in.readLine())!=null)
                    {
                        if(Integer.parseInt(num)==42)
                            break;
                        else
                            out.write(num);
                    }
        }catch(Exception e)
        {
            System.out.println("File not found");
        }
    }
}

4 个答案:

答案 0 :(得分:1)

问题是您没有关闭out流。将其更改为:

 BufferedReader in = null;
 BufferedReader out = null;
 try{
        String num;
        in = new BufferedReader(new FileReader("in.txt"));
        out = new BufferedWriter(new FileWriter("out.txt"));

         while((num=in.readLine())!=null)
                  {
                      if(Integer.parseInt(num)==42)
                          break;
                      else
                          out.write(num);
                  }
               out.close()
    }catch(Exception e)
    {
        System.out.println("File not found");
    }finally{
       try{
        if(in!=null) in.close();
        if(out!=null) out.close();
        }catch(Exception ex) {ex.printStackTrace();}
    }

这是因为,您的OutputStream会缓冲您的数据并定期刷新它。关闭流不仅会刷新它,而且还使其他应用程序可以安全地使用该文件。

在您的情况下,您可能会发现一种奇怪的行为(有时完全写入,有时不会)。这是因为BufferedWriter()尝试在其finalize方法中关闭它(可能会或可能不会被调用)

答案 1 :(得分:0)

您需要关闭FileWriter

while((num=in.readLine())!=null)
{
    if(Integer.parseInt(num)==42)
        break;
    else{
        out.write(num);
        out.flush();
    }
}
out.close();

内容总是需要刷新。 close()本身会为您刷新流,但无论如何flush()都是好的做法。

答案 2 :(得分:0)

您应该在停止使用后关闭流。关闭它将首先刷新流(将打印所有缓冲的数据),其次,将释放流使用的所有资源。

答案 3 :(得分:0)

确保在try block结束时有out.close()

如果您将in.txt作为一个非常大的文件,那么您会在out.txt中看到一些数据。

BufferedWriter仅在有足够数据要刷新时写入,大约等于一个块大小。