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已创建。
但是,如果我手动打开它,它是空的。
这可能是什么原因?
您永远不会刷新缓冲区,也不会关闭BufferedWriter。
在for循环之后,进行以下调用:
buff.flush(); buff.close();
即使有其他资源,完成后关闭它们也是一个好主意。
您必须在使用后close()
流。
写循环后调用buff.close()
; BufferedWriter会在关闭时将数据刷新到文件。
虽然问题得到了回答。 我想补充一下缓冲区的工作原理。
每当你尝试使用缓冲区写入文件时,无论你写什么都会被添加到缓冲区。 当缓冲区已满时,内容将写入文件。 这样我们就可以减少硬盘的点击次数,从而提高效率。
如果我们想在没有缓冲区变满的情况下强制写入文件,我们使用flush()方法。