为什么我不能通过PrintWriter写入大量数据?
String result = acquireLengthyData();
PrintWriter out = new PrintWriter("D:/log.txt");
out.println(result);
其中result.lenght() = 189718
。但log.txt
中缺少一些数据。为什么?如何正确写入文件?
答案 0 :(得分:5)
您需要在写入后刷新,它会刷新流。 PrintWriter#flush
会这样做。
刷新流。如果流已保存任何 来自缓冲区中各种write()方法的字符,写出它们 立即到达目的地。
PrintWriter#flush
- Java doc
代码段 -
PrintWriter out = new PrintWriter("D:/log.txt");
out.println(result);
out.flush();
out.close();
使用后不要忘记关闭作家。
答案 1 :(得分:3)
Class PrintWriter
与PrintStream类不同,如果启用了自动刷新,则只有在调用println,printf或format方法之一时才会执行,而不是每当输出换行符时。这些方法使用平台自己的行分隔符概念而不是换行符。
因此,您需要在创建Printwriter时启用automatic flush
选项:
PrintWriter out = new PrintWriter(new FileWriter("D:/log.txt"),true);
out.println(result);
// finally{out.close();} with a null check, if required.
注意:启用自动刷新将强制将缓冲区中的内容写入输出流,即使缓冲区尚未达到其内容保留容量。