1

我有一个包含内容的文本文件:

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();
    }
}
}

任何有助于保持文件格式相同并仅替换字符串的帮助。谢谢

4

3 回答 3

1

像这样阅读时会丢失换行符:

while((line = reader.readLine()) != null) {
    oldtext += line + " ";
}

要修复它,您应该将循环内的代码替换为

oldtext += line + "\n";

但请注意,逐行读取文件并将每一行连接起来+=是非常低效的。在学习 Java 时可以这样做,但在任何生产代码中都不能这样做。使用一个StringBuilder或一些外部库来处理 IO。

于 2013-01-05T12:28:31.480 回答
1

当您按行阅读时,您将删除所有换行符,然后用空格替换它们。

oldtext += line + " ";

需要是

oldtext += line + System.lineSeparator();
于 2013-01-05T12:28:38.420 回答
0

代替

oldtext += line + " ";

经过

oldtext += line + "\n";

请注意,这会将换行符(可能是 \r 或 \r\n)转换为 \n。另请注意,在循环中使用 + 运算符进行连接非常低效,因为它会产生大量大型一次性 STring 实例。你最好使用 StringBuilder 或 StringWriter。

为什么不简单地将整个文件读取为单个字符串,然后调用 replaceAll 并重写所有内容。见Guava 的方法commons-io 方法

于 2013-01-05T12:30:11.220 回答