【发布时间】:2014-06-18 22:48:14
【问题描述】:
根据 java 文档,
一般来说,Writer 会立即将其输出发送到底层 字符或字节流。除非需要立即输出,否则它是 建议在其 write() 的任何 Writer 周围包装一个 BufferedWriter 操作可能成本很高,例如 FileWriters 和 OutputStreamWriters。 例如,
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
会将 PrintWriter 的输出缓冲到文件中。无需缓冲, 每次调用 print() 方法都会导致字符 转换成字节,然后立即写入 文件,这可能非常低效。
但是下面的代码看起来好像 FileWriter 在刷新到输出流之前也会缓冲字节。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class TestFileWriter {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileWriter fileWriter= new FileWriter("test.txt");
File file=new File("test.txt");
for (int i=0; i<1000; i++) {
fileWriter.write("a very long string, a very long string, a very long string, a very long string, a very long string\n");
if(i%50 == 0)
System.out.print("file size=" + file.length()+",");
}
fileWriter.close();
System.out.println("file size=" + file.length());
}
}
输出:-
文件大小=0,文件大小=0,文件大小=8192,文件大小=8192,文件 大小=16384,文件大小=24576,文件大小=24576,文件大小=32768,文件 大小=32768,文件大小=40960,文件大小=49152,文件大小=49152,文件 大小=57344,文件大小=57344,文件大小=65536,文件大小=73728,文件 大小=73728,文件大小=81920,文件大小=81920,文件大小=90112,文件 尺寸=99000
为什么在写入文件时没有将数据写入文件?
【问题讨论】:
-
所以我知道操作系统正在返回文件大小的缓存信息以防打开文件[file.length()]。但是,当我在将每一行写入文件后断点并打开文件以查看数据是否已写入时,它仍然是空的。
-
+1 个有趣的问题。
标签: java file-io fileoutputstream filewriter bufferedwriter