Java 最好最快的编辑文本文件的方法

Java the best and fastest way to edit text file


我需要高效快速地编辑大量文本文件!我能做的最好的事情是什么? 我已经想出了这个功能:
private boolean edit(File source)
{
    if (!source.getAbsolutePath().endsWith(".java")) //Java text files only
        return false;

    String l, str = "", orig = ""; 
    try
    {
        BufferedReader r = new BufferedReader(new FileReader(source));
        while ((l = r.readLine()) != null)
        {
            orig = str += l+"\n";
        }
        r.close();

        for (Entry<String, String> e : mappings.entrySet()) //Replacing string by HashMap mappings!
            str = fastReplace(str, e.getKey(), e.getValue()); //Faster alterntive to String#replaceAll
        
        if (!str.equals(orig))
        {   
            BufferedWriter bf = new BufferedWriter(new FileWriter(source));
            bf.write(str);  
            
            bf.close();
            return true;
        }
    }
    catch (Exception e) 
    {
        doLog(e.toString()); //Logging exception but unimportant for us...
    }
    return false;
}

我发现我的函数有点笨拙,因为它首先需要将文本文件读入字符串,然后对其进行编辑,然后再将其写回。所以问题是。有没有更好更快的方法来编辑文本文件?我的意思是,例如,无需将其转换为字符串然后再将其写回。例如,有没有一种方法可以直接将文件作为文本文件进行编辑,或者在不覆盖文件相同未更改部分的情况下写入文件,或者有任何更快的读写文件的方法?还是我的功能实际上已经达到了最快的速度?
如果有人想知道我的“fastReplace”函数是做什么的,那么检查这个 Faster alternatives to replace method in a Java String? 但我认为这不重要。

如果您需要用另一个完全相同大小的字节替换一个字符串,那么您可以以多块大小的块顺序读取数据,替换所需的点并在更改时写回数据已经做出来了。如果未进行任何更改,则无需写回该块。在最佳情况下,您将节省很少的 I/O 操作,但代价是代码非常复杂。

如果你的编辑比较复杂,涉及字符串插入,那么你就没有办法阅读和写回整个文本。

早期优化不是个好主意。源代码文件几乎不会跨越单个块,在您的情况下,您可能不会节省时间或 space.