用Java修改.txt文件

Zak*_*raj 28 java

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

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

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

这个解决方案对我来说似乎有点"hacky",特别是如果我的文本文件中有数千行.

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

And*_*kov 30

我最近没有用Java做过这个,但是将整个文件写入内存似乎是一个坏主意.

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

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


Pet*_*rey 5

如果文件只有几千行,你应该能够在一次读取中读取整个文件并将其转换为String.

您可以使用具有以下方法的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) {
    }
}
Run Code Online (Sandbox Code Playgroud)