Bufferedwriter工作,但文件为空?

时间:2013-09-02 13:03:46

标签: java file bufferedwriter

我有以下代码:

CSVmaker(LinkedList data) {
    String [] myLines = makeStrings(data);
  //  for (int k = 0; k<myLines.length; k++)
  //  System.out.println(myLines[]);




    this.file = new File("rawdata.csv");
        try {
            BufferedWriter buff = new BufferedWriter(new FileWriter(file));
            for (int i = 0; i<myLines.length; i++){
                buff.write(myLines[i]);
                buff.newLine();
                System.out.println("done");
            }
        } catch (IOException ex) {
          System.out.println("except");
        }



}

不,我检查了myLines的内容,这些都是正确的。

另外,我得到的印刷品就像我应该的那样经常打印“完成”。 csv已创建。

但是,如果我手动打开它,它就是空的。

这可能是什么原因?

4 个答案:

答案 0 :(得分:11)

您永远不会刷新缓冲区,也不会关闭BufferedWriter。

在for循环之后,进行以下调用:

buff.flush();
buff.close();

即使使用其他资源,完成后关闭它们也是一个好主意。

答案 1 :(得分:4)

使用后您必须close() 写循环后调用buff.close(); BufferedWriter会在收盘时将数据刷新到文件。

答案 2 :(得分:1)

虽然回答了这个问题。我想补充一下缓冲区的工作原理。

每当您尝试使用缓冲区写入文件时,无论您编写什么内容都会添加到缓冲区中。当缓冲区已满时,内容将写入文件。这样我们就减少了硬盘驱动器的命中次数,从而提高了效率。

如果我们想在没有缓冲区变满的情况下强行写入文件,我们使用flush()方法。

答案 3 :(得分:0)

从Java 8开始,只需尝试使用资源即可完成操作,资源会自动关闭BufferedWriter。另请参阅新类文件的用法

try (BufferedWriter writer = Files.newBufferedWriter(somePath, yourCharset)){
    writer.write(output);
}