Java 中的文件处理 - 在文件中的备用行处添加文本

File Handling in Java - Adding a text at alternate lines in a file

提问人:SWETHAN DEEKONDA 提问时间:11/4/2023 最后编辑:SWETHAN DEEKONDA 更新时间:11/5/2023 访问量:58

问:

我想编写一个 Java 程序,它接受文本文件的输入,并在其中的每一行之后添加一行文本行。 例如,如果文件包含以下内容:

  • 1行
  • 2线
  • 3线

输出必须是:

  • 1行
  • 世界您好
  • 2线
  • 世界您好
  • 3线
  • 世界您好

(忽略要点)

我在一次采访中遇到了这个问题,一无所知。我想一行一行地遍历文件,每次遇到新行时,我们都可以附加“Hello World”字符串。我不知道如何将其放入代码中。我是一个初学者,只是在学习。

Java 文件

评论

0赞 Scott Hunter 11/4/2023
你得到你面试的目的了吗?
1赞 Old Dog Programmer 11/5/2023
另一种方法是将文件的全部内容读入内存,然后使用新数据写回。
1赞 SWETHAN DEEKONDA 11/5/2023
@OldDogProgrammer我被告知必须对同一文件进行更改,因此我假设删除旧文件并使用旧文件的名称重命名它最终可能会成功。我需要把它放在代码中并检查,这就是我发现困难的地方。我会尝试并回来。
1赞 Gyro Gearloose 11/5/2023
不是你想要的,但如果这是一个一次性的工作,并且你碰巧有一个带有 bash 的 linux 盒子,你可以做 cat test.txt | sed 's/$/\nHello World/'
1赞 Old Dog Programmer 11/5/2023
读一行,然后用“Hello World”行写回去的问题是,写回去会写完刚才读的一行后面的部分内容。

答:

0赞 Reilas 11/5/2023 #1

'...我想一行一行地遍历文件,每次遇到新行时,我们都可以附加“Hello World”字符串。我不知道如何将其放入代码中。...'

利用 BufferedReaderScanner 类,这两个类都提供方便的 readLinenextLine 方法。

下面是一个示例。

String fs = "file.txt", s;
List<String> l = new ArrayList<>();
try (BufferedReader r = new BufferedReader(new FileReader(fs))) {
    while ((s = r.readLine()) != null) {
        l.add(s);
        l.add("Hello World");
    }
}
try (PrintWriter w = new PrintWriter(fs)) {
    for (String v : l) w.println(v);
    w.flush();
}

而且,这是一个使用流的示例。

String s = "file.txt";
List<String> l = new ArrayList<>();
try (BufferedReader r = new BufferedReader(new FileReader(s))) {
    r.lines()
     .flatMap(x -> Stream.of(x, "Hello World"))
     .forEachOrdered(l::add);
}
try (PrintWriter w = new PrintWriter(s)) {
    l.forEach(w::println);
    w.flush();
}