Java替换文本文件中的行

use*_*542 7 java file-io

我从另一个问题中找到了这段代码

private void updateLine(String toUpdate, String updated) throws IOException {
    BufferedReader file = new BufferedReader(new FileReader(data));
    String line;
    String input = "";

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

    input = input.replace(toUpdate, updated);

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

    file.close();
    os.close();
}
Run Code Online (Sandbox Code Playgroud)

在我替换一些行之前,这是我的文件

example1
example2
example3
Run Code Online (Sandbox Code Playgroud)

但是当我替换一行时,该文件现在看起来像这样

example1example2example3
Run Code Online (Sandbox Code Playgroud)

这使得当文件中有很多行时无法读取文件.

我将如何编辑上面的代码,使我的文件在开始时看起来像什么?

Rob*_*sen 9

System.lineSeparator()而不是\n.

while ((line = file.readLine()) != null)
    input += line + System.lineSeparator();
Run Code Online (Sandbox Code Playgroud)

问题是在Unix系统上,行分隔符是\n在Windows系统上,它是\r\n.

在早于Java 7的Java版本中,您必须使用它System.getProperty("line.separator").

正如评论中指出的那样,如果你担心内存使用情况,那么不将整个输出存储在一个变量中,而是在你用来处理输入的循环中逐行写出来是明智的. .