0

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

导入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

4 回答 4

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方法中关闭它(可能会或可能不会被调用)

于 2013-10-01T18:03:57.503 回答
0

你需要关闭你的FileWriter

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

内容总是需要刷新。它本身会为您刷新流,但无论如何close()这是一个好习惯。flush()

于 2013-10-01T18:05:17.797 回答
0

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

于 2013-10-01T18:10:08.483 回答
0

确保你有out.close()在 try 块的末尾。

如果你有in.txt一个非常大的文件,那么你会在out.txt.

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

于 2013-10-01T18:19:01.803 回答