Java:只替换文件中的一行/字符串

时间:2015-06-18 21:52:59

标签: java string file file-io replace

我使用以下代码将text替换为word(取自here):

String targetFile = "filename";
String toUpdate = "text";
String updated = "word";

public static void updateLine() {
        BufferedReader file = new BufferedReader(new FileReader(targetFile));
        String line;
        String input = "";

        while ((line = file.readLine()) != null)
            input += line + "\n";

        input = input.replace(toUpdate, updated);

        FileOutputStream os = new FileOutputStream(targetFile);
        os.write(input.getBytes());

        file.close();
        os.close();
}

我有一个文件,我只想替换第二行(text):

My text
text
text from the book
The best text

它工作正常,但它替换了文件中的所有toUpdate字符串。如何编辑代码以仅替换文件中的一行/字符串(完全类似于toUpdate字符串)?

预期文件应如下所示:

My text
word
text from the book
The best text

这可能吗?

2 个答案:

答案 0 :(得分:2)

不要在整个字符串上执行替换,而是在阅读时执行。通过这种方式,您可以对行进行计数,并仅将其应用于第二行:

BufferedReader file = new BufferedReader(new FileReader(targetFile));
String line;
String input = "";
int count = 0;

while ((line = file.readLine()) != null) {
    if (count == 1) {
        line = line.replace(toUpdate, updated);
    }
    input += line + "\n";
    ++count;
}

请注意,在字符串上使用+运算符,尤其是在循环中,通常是一个坏主意,您应该使用StringBuilder代替:

BufferedReader file = new BufferedReader(new FileReader(targetFile));
String line;
StringBuilder input = new StringBuilder();
int count = 0;

while ((line = file.readLine()) != null) {
    if (count == 1) {
        line = line.replace(toUpdate, updated);
    }
    input.append(line).append('\n');
    ++count;
}

答案 1 :(得分:1)

您可以在第一次更新时引入布尔变量并将其设置为true。解析行时,在执行更新之前检查变量,只有在为false时才进行更新。这样,您将使用包含目标String的第一行更新第一行,无论是第二行还是其他。

您应该在阅读文件时进行更新,以便工作。