在 Java 中修改 .txt 文件

新手上路,请多包涵

我有一个要使用 Java 编辑的文本文件。它有数千行。我基本上想遍历这些行并更改/编辑/删除一些文本。这需要经常发生。

从我在其他网站上看到的解决方案来看,一般的做法似乎是:

  • 使用 BufferedReader 打开现有文件
  • 读取每一行,对每一行进行修改,并将其添加到 StringBuilder
  • 读取和修改所有文本后,将 StringBuilder 的内容写入新文件
  • 用新文件替换旧文件

这个解决方案对我来说似乎有点“hacky”,尤其是当我的文本文件中有数千行时。

有人知道更好的解决方案吗?

原文由 Zakir Hemraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我最近没有在 Java 中这样做过,但是将整个文件写入内存似乎是个坏主意。

我能想到的最好的主意是同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入临时文件。最后,删除原始文件并重命名临时文件。

如果您对文件系统具有修改权限,您可能还具有删除和重命名权限。

原文由 Andrei Krotkov 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果文件只有几千行,您应该能够一次读取整个文件并将其转换为字符串。

您可以使用具有如下方法的 apache IOUtils。

 public static String readFile(String filename) throws IOException {
    File file = new File(filename);
    int len = (int) file.length();
    byte[] bytes = new byte[len];
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        assert len == fis.read(bytes);
    } catch (IOException e) {
        close(fis);
        throw e;
    }
    return new String(bytes, "UTF-8");
}

public static void writeFile(String filename, String text) throws IOException {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filename);
        fos.write(text.getBytes("UTF-8"));
    } catch (IOException e) {
        close(fos);
        throw e;
    }
}

public static void close(Closeable closeable) {
    try {
        closeable.close();
    } catch(IOException ignored) {
    }
}

原文由 Peter Lawrey 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题