gpt4 book ai didi

java - Files.write() 无法正常工作,而 BufferedWriter 似乎工作正常

转载 作者:行者123 更新时间:2023-12-01 08:58:44 24 4
gpt4 key购买 nike

我有一个简单的练习要做:

  • 读取文件
  • 过滤掉所有以“//”开头的行
  • 删除多余的空格
  • 将其写回文件

我想出了以下代码:

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.stream.Collectors;

import static java.nio.file.Files.lines;
import static java.nio.file.Files.newBufferedWriter;
import static java.nio.file.Files.write;
import static java.nio.file.Paths.get;
import static java.util.stream.Collectors.toList;

public class FileParser {
public static final String PATH = "test.txt";

public static void main(String... args) {
try {
List<String> strings = lines(get(PATH)).filter(line -> !line.startsWith("//")).map(line -> line.trim().replaceAll(" +", " ")).collect(toList());
// write(get(PATH), strings, StandardOpenOption.WRITE);
BufferedWriter writer = newBufferedWriter(get(PATH));
for (String string : strings) {
writer.write(string);
writer.newLine();
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

不幸的是,由于某种原因,注释的一段代码不起作用,而下面的代码则工作得很好。该字符串列表也始终只包含正确的结果。对于文件:

a
//b
c

预期结果应该是:

a
c

实际结果是:

a
c

c

这个问题的根源是什么?

当写入与我们从中读取的文件不同的文件时,它会起作用。

最佳答案

Here's StandardOpenOptions 的 Javadoc。这是关于 WRITE 选项的内容:

Open for write access.

虽然它的信息不是太多,但它会打开文件并从头开始写入。它会覆盖现有内容并保持剩余文本不变。如果您想删除现有内容,则需要使用 TRUNCATE_EXISTING 选项:

If the file already exists and it is opened for WRITE access, then its length is truncated to 0. This option is ignored if the file is opened only for READ access.

在使用此选项之前,您需要确保文件未打开(在任何编辑器或程序中)。

这是与您的文件配合良好的测试程序:

public static void main(String[] args) throws IOException {
List<String> strings = Files.lines(Paths.get("<somepath>/Test.txt")).filter(line -> !line.startsWith("//")).map(line -> line.trim().replaceAll(" +", " ")).collect(Collectors.toList());
System.out.println(strings);
Files.write(Paths.get("<somepath>/Test.txt"), strings, StandardOpenOption.TRUNCATE_EXISTING);
}

关于java - Files.write() 无法正常工作,而 BufferedWriter 似乎工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com