如何解决Java最佳和最快的方式来编辑文本文件
我需要快速有效地编辑大量文本文件!我能做的最好的事情是什么? 我已经想出了这个功能:
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操作,但代价是代码复杂度高。
如果您的编辑更加复杂并且涉及字符串插入,那么您将无法摆脱对整个文本的读写操作。
早期优化不是一个好主意。源代码文件几乎不会跨越一个块,在您的情况下,您可能不会节省时间或空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。