Time-efficient 如何追加到 Java 中现有 CSV 文件中的现有 header?

Time-efficient way to append to existing header in existing CSV file in Java?

我想修改现有 csv 文件的第一行或 header,方法是在该行的末尾添加一个字符串。

我试过使用 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 将所有内容写入新文件

是不是太慢了?对此有更优雅的解决方案吗?谢谢!

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

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

由于 Java 文件 I/O API 不支持它,OpenCvs API 也不支持。 (或者至少不在幕后重写文件。)

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

备注:

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

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