我有一个文本文件,内容为:
love
test
me
once
我的Java程序将单词"love"替换为"liverpool"。但是文本文件失去了它的格式,变成这样:
Liverpool test me once
所有字符串出现在一行。
这是我目前为止写的:
import java.io.*;
public class Replace_Line {
public static void main(String args[]) {
try {
File file = new File("C:\Users\Antish\Desktop\Test_File.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldtext = "";
while ((line = reader.readLine()) != null) {
oldtext += line + " ";
}
reader.close();
// replace a word in a file
// String newtext = oldtext.replaceAll("boy", "Love");
// To replace a line in a file
String newtext = oldtext.replaceAll("love", "Liverpool");
FileWriter writer = new FileWriter(
"C:\Users\Antish\Desktop\Test_File.txt");
writer.write(newtext);
writer.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
任何帮助保持文件格式相同,只是替换字符串。由于
当你按行阅读时,你删除了所有的换行符,然后用空格代替它们。
oldtext += line + " ";
必须是
oldtext += line + System.lineSeparator();
当你这样阅读时,你会失去换行符:
while((line = reader.readLine()) != null) {
oldtext += line + " ";
}
要解决这个问题,应该用
替换循环中的代码。oldtext += line + "n";
但是请注意,逐行读取文件并将每行与+=
连接是非常低效的。在学习Java时可以这样做,但在任何生产代码中都不能这样做。使用StringBuilder
或一些外部库来处理IO。
Replace
oldtext += line + " ";
oldtext += line + "n";
注意,这会将新的行字符(可以是r或rn)转换为一个n。还要注意,在循环中使用+操作符进行连接的效率非常低,因为它会产生大量的大型一次性STring实例。你最好使用StringBuilder或StringWriter。
为什么不简单地将整个文件读取为单个String,然后调用replaceAll并重写所有内容。参见Guava方法或commons-io方法