我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存。通常我会使用 Reader 和 Writer,即如下所示:
public static void replace(String oldstring, String newstring, File in, File out)
throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(in));
PrintWriter writer = new PrintWriter(new FileWriter(out));
String line = null;
while ((line = reader.readLine()) != null)
writer.println(line.replaceAll(oldstring,newstring));
// I'm aware of the potential for resource leaks here. Proper resource
// handling has been omitted in the interest of brevity
reader.close();
writer.close();
}
但是,我想就地进行替换,并且不认为我可以同时在同一个文件上打开读取器和写入器。另外,我使用的是 Java 1.4,因此无法访问 NIO、Scanner 等。
谢谢,
大学教师
文件的“就地”替换通常是不可能的,除非替换的长度与原始文件的长度完全相同。否则,文件将需要增长,从而将所有后面的字节“向右”打乱,或者缩小。执行此操作的常见方法是读取文件,将替换内容写入临时文件,然后用临时文件替换原始文件。
这还有一个优点,即相关文件始终要么处于原始状态,要么处于完全替换的状态,而绝不会介于两者之间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)