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()
之前是多余的。