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.
我需要高效快速地编辑大量文本文件!我能做的最好的事情是什么? 我已经想出了这个功能:
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.