微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FileWriter-没有尝试资源的数据不会完全写入文件

如何解决FileWriter-没有尝试资源的数据不会完全写入文件

我想在文本文件中写入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();
        }
    }

解决方法

那是因为您没有在close()实例上调用writer方法-编写者定义了一些缓冲区,能够存储大量未写入的数据

使用try-with-resource方法时,close()被自动调用,因此每个数据都被正确刷新


在此处了解更多信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。