java - PrintWriter 未创建具有假定行数的输出

标签 java csv

我有一个java程序,它应该输出数据,再次接收数据,读取然后输出一些额外的结果列。 (总共有两个输出)为了测试我的程序,我只是尝试读取并打印出完全相同的 csv 以查看它是否有效。然而,我的第一次输出返回了786718行数据,这是完整且正确的,但是当再次读取并输出时,数据在第786595行被剪切,甚至该行缺少一些列数据。文件大小也是 74868KB,数据大小为 74072KB。这是因为我的 java 程序内存不足或 excel/.csv 文件的问题吗?

    PrintWriter writer = null;
    try {
        writer = new PrintWriter(saveFileName + " updated.csv", "UTF-8");

        for (Map.Entry<String, ArrayList> entry : readOutputCSV(saveFileName).entrySet()) {
            FindOutput.find(entry.getKey(), entry.getValue(), checkInMRTWriter);
        }
    } finally {
        if (writer != null) {
            writer.flush();
            writer.close();
        }
    }

最佳答案

最可能的原因是您没有刷新或关闭 PrintWriter。

来自 Java 源代码

public PrintWriter(OutputStream out) {
    this(out, false);
}

public PrintWriter(OutputStream out, boolean autoFlush) {
    this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);

可以看到PrintWriter默认是有缓冲的。

默认缓冲区大小为 8 KiB,因此如果您将此数据保留在缓冲区中并且不将其写出,则最多可能会丢失最后 8 KiB 的数据。

关于java - PrintWriter 未创建具有假定行数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945980/

相关文章:

java - 使用 Spring MVC 上传文件不起作用

python - 加快处理庞大数据集的 Python 文件

python - 用 Pandas 迭代合并数据框

java - 如何从 java android 中的相机预览中获取字节数组?

java - 为什么缓存使用最近使用(MRU)算法作为驱逐策略?

java - Android 房间错误 : The columns returned by the query does not have the fields even though they are annotated as non-null or primitive

python - 使用来自另一个 csv 文件的列创建一个新的 csv 文件

ruby-on-rails - RAILS - 将参数传递给 Rake 任务

java - 使用 Maven 2 API 获取 WAR Artifact 的依赖项

java - 使用 javafx 的基本计算器 : how to reset or restart