例如FileWriter f2 = new FileWriter(filename);
f2.write("adafadfafa");
//f2.close();
在写入文件的时候,我最后没有用f2.close()关闭,程序结束的时候我的文件中不会有内容,是空文件;但是当我最后用f2.close()关闭文件的时候,或者用f2.flush();
FileWriter f2 = new FileWriter(filename);
f2.write("adafadfafa");
f2.close();//f2.flush();程序结束后文件中就有内容了问了很多人,都说必须要关闭文件,但是现在有人没有关闭文件的时候,文件中仍然可以出力内容,我搞不懂了。

解决方案 »

  1.   

    个人认为FileWriter 应该有缓冲机制。刷新缓冲区或者关闭流(关闭前先做刷新)才真正写到文件中。带有buffered的流如果不关闭或者刷新缓冲区最后8个字节不会被写入。
      

  2.   

    经常用printwriter filewriter没用过几次  也有这个问题
      

  3.   

    FileWriter 必须调用 close(),才会把内容写到文件里。
      

  4.   

    多谢大家啊,今天我debug跟进了下,发现了一个现象,应该是跟大伙的都差不多,就是有缓冲机制,只有关闭的时候文件才会写入,但是如果没有关闭,如果缓冲>8KB的时候,缓冲中的数据就会被写入文件,但是最后剩余的,不足8KB的部分不会被写入文件,所以最后必须调用close()关闭,才会使完整的文件内容出力。
    至于缓冲8KB不知道是系统的默认属性设置,还是有配置文件是这样设置的,继续研究。再次感谢各位,谢谢!
      

  5.   

    public class FileWriterextends OutputStreamWriter
    用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。
    要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。这个应该能说明你的问题了!!