FileWriter - 没有 try-with-resource 数据未完全写入文件 [重复]
Posted
技术标签:
【中文标题】FileWriter - 没有 try-with-resource 数据未完全写入文件 [重复]【英文标题】:FileWriter - without try-with-resource data is not fully written to file [duplicate] 【发布时间】:2020-09-10 10:38:21 【问题描述】:我想在一个文本文件中写入 100 万行。
当我使用没有try-with-resource
样式的 FileWriter(不释放资源)时,我发现它在 998976 左右停止。
...
998968
998969
998970
998971
998972
998973
998974
998975
998976
9
@Test
void writeTooLargeFileThisIsBad() throws IOException
File newFile = new File("src/test/resources/targets/large.csv");
if (!newFile.exists()) newFile.createNewFile();
FileWriter writer = new FileWriter("src/test/resources/targets/large.csv", StandardCharsets.UTF_8);
for (int i = 1; i < 1000000; i++)
writer.write(String.valueOf(i));
writer.write(System.lineSeparator());
但是当我尝试使用资源时,它会正常完成。 (达到999999)
两者都很快。
为什么?
@Test
void writeTooLargeFileThisIsGood() throws IOException
File newFile = new File("src/test/resources/targets/large.csv");
if (!newFile.exists()) newFile.createNewFile();
try (FileWriter writer = new FileWriter("src/test/resources/targets/large.csv", StandardCharsets.UTF_8))
for (int i = 1; i < 1000000; i++)
writer.write(String.valueOf(i));
writer.write(System.lineSeparator());
catch (Exception e)
e.printStackTrace();
【问题讨论】:
可能是因为writer最后没有关闭,所以最后的输出行可能没有被flush并输出到文件中。不过只是猜测。 【参考方案1】:那是因为您没有在 writer
实例上调用 close()
方法 - 编写器定义了一些缓冲区,能够存储大量未写入的数据
当您使用try-with-resource
方法时,会自动调用close()
,以便正确刷新每个数据
在这里阅读更多:
BufferedWriter not writing everything to its output file Is flush() call necessary when using try-with-resources【讨论】:
以上是关于FileWriter - 没有 try-with-resource 数据未完全写入文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
FileWriter - 没有 try-with-resource 数据未完全写入文件 [重复]
Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu