Java Bufferedwriter工作,但文件为空?

Java Bufferedwriter工作,但文件为空?,java,file,bufferedwriter,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

我有以下代码:

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");
        }



}
CSVmaker(LinkedList数据){
String[]myLines=makeStrings(数据);

//对于(int k=0;k您从不刷新缓冲区,也不关闭BufferedWriter

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

buff.flush();
buff.close();
即使使用其他资源,在完成后关闭它们也是一个好主意。

使用后必须
关闭()
流。

在写循环后调用
buff.close()
;BufferedWriter将在关闭时将数据刷新到文件。

尽管问题已得到回答。我想添加缓冲区的工作方式

每当您尝试使用缓冲区写入文件时,您写入的内容都会添加到缓冲区。当缓冲区已满时,内容会写入文件。通过这种方式,我们减少了对硬盘的点击次数,从而提高了效率


如果我们想在缓冲区未满的情况下强制写入文件,我们可以使用flush()方法。

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

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

您不需要
buff.close()
?缓冲区的全部作用是缓冲数据,直到数据填满或您告诉它您要写入。您没有刷新()或关闭()流,因此数据永远不会离开缓冲区。关闭的可能重复实际上应该在finally块中完成,因为即使循环中发生任何异常,文件描述符也应该关闭。如果使用Java 7,则应首选try with resources语句。@JBNizet是的,我对clar保持简单在我洗了10分钟的澡后,我发现有2个答案是正确的。因为我想我不能投票给2个。如果可以的话,我只是投票给谁是第一个。但我还没有最终决定——如果我这样做了,我得到的“找不到变量buff”遇到了一个问题,在文件中显示了某个字符串,而没有使用flush()在进一步调查后,我发现如果字符串的大小大于定义的内部限制,则bufferwriter会在没有flush()提示的情况下输出到文件。
flush()
close()
之前是多余的。