首页 > 解决方案 > 在 Java 中附加到现有 CSV 文件中的现有标头的省时方法?

问题描述

我想通过在该行的末尾添加一个字符串来修改现有 csv 文件的第一行或标题。

我已经尝试使用 BufferedWriter 来执行此操作,但我只能将其附加到文件末尾。

我的工作代码:

      public static void writeStringtoCsvFile(String filePath, String input) throws IOException {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filePath, true)));
    out.append(input);
    out.close();
  }

似乎 OpenCsv 也没有附加到现有文件的可用方法。我需要处理的文件大小至少为 160mb 或 1+mil 记录,替代方法是:

  1. BufferedReader 读取所有行
  2. 将任何需要的内容附加到第一行
  3. BufferedWriter 将所有内容写入新文件

太慢了?有没有更优雅的解决方案?谢谢!

标签: javacsvfilebufferedreaderbufferedwriter

解决方案


文件系统不允许您在不重写插入/删除点之后的所有字节的情况下将字节插入文件中间或从文件中间删除字节。

由于文件系统不支持,Java 文件 I/O API 无法支持。

由于 Java 文件 I/O API 不支持它,OpenCvs API 也不支持。(或者至少在不重写文件的情况下不会。)

因此,答案是没有比读取写入文件的所有行更有效的方法了。

笔记:

  1. 虽然在技术上可以对文件进行就地重写,但创建一个新文件、写入文件并在写入完成后重命名它更安全(并且可能更有效)。

  2. 一次读取和写入一行(使用 BufferedReader / BufferedWriter)比同时将所有行读入内存,然后将它们全部写出要好。特别是如果文件很大。


推荐阅读