如何在替换字符串后保持文本文件内容的格式相同

时间:2013-01-05 12:23:29

标签: java eclipse file

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

love 
test
me
once

我的Java程序用“利物浦”取代了“爱”这个词。但是文本文件丢失了它的格式并且变成这样:

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

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

3 个答案:

答案 0 :(得分:1)

你这边读完就会丢失换行符:

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

要修复它,您应该用

替换循环内的代码
oldtext += line + "\n";

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

答案 1 :(得分:1)

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

oldtext += line + " ";

需要

oldtext += line + System.lineSeparator();

答案 2 :(得分:0)

替换

oldtext += line + " ";

通过

oldtext += line + "\n";

请注意,这将通过\ n转换新行字符(可能是\ r或\ r \ n)。还要注意,在循环中使用+运算符连接是非常低效的,因为它会产生大量的大量丢弃STring实例。你最好使用StringBuilder或StringWriter。

为什么不简单地将整个文件作为单个String读取,然后调用replaceAll并重写所有内容。请参阅Guava's methodcommons-io method