查找行并将它们复制到 Java 中的新文件中
Find lines and copy them into a new file in Java
我正在寻找一个小代码片段,它可以在文件中查找行并复制与搜索字符串匹配的行。但是,恐怕我找不到这样的片段。例如,如果我在文件中有以下行:
aaaa aaa xx
bbbb bb
cccc cx xx
bbbb ax aa
yyyy yd cd
最好有一个像 public void copyFoundLines(String searchStrings)
这样的函数。例如,如果我想搜索 aa 和 xx,我会得到一个这样的新文件:
aaaa aaa xx
cccc cx xx
bbbb ax aa
你的问题不清楚,但这里有一个方法:
public static void copyMatchingLines(final Path src, final Path dst,
final String... searchStrings)
throws IOException
{
final Predicate<String> predicate
= s -> Arrays.stream(searchStrings).anyMatch(s::contains);
try (
final Stream<String> lines = Files.lines(src, StandardCharsets.UTF_8);
final BufferedWriter writer = Files.newBufferedWriter(dst, StandardCharsets.UTF_8,
StandardOpenOption.CREATE_NEW);
) {
lines.filter(predicate).forEach(line -> {
writer.write(line);
writer.newLine();
});
writer.flush();
}
}
我正在寻找一个小代码片段,它可以在文件中查找行并复制与搜索字符串匹配的行。但是,恐怕我找不到这样的片段。例如,如果我在文件中有以下行:
aaaa aaa xx
bbbb bb
cccc cx xx
bbbb ax aa
yyyy yd cd
最好有一个像 public void copyFoundLines(String searchStrings)
这样的函数。例如,如果我想搜索 aa 和 xx,我会得到一个这样的新文件:
aaaa aaa xx
cccc cx xx
bbbb ax aa
你的问题不清楚,但这里有一个方法:
public static void copyMatchingLines(final Path src, final Path dst,
final String... searchStrings)
throws IOException
{
final Predicate<String> predicate
= s -> Arrays.stream(searchStrings).anyMatch(s::contains);
try (
final Stream<String> lines = Files.lines(src, StandardCharsets.UTF_8);
final BufferedWriter writer = Files.newBufferedWriter(dst, StandardCharsets.UTF_8,
StandardOpenOption.CREATE_NEW);
) {
lines.filter(predicate).forEach(line -> {
writer.write(line);
writer.newLine();
});
writer.flush();
}
}