将流写入<String>文件 Java



我正在使用javaNIO包的Files.lines()方法读取一个文件,该方法给出类型为Stream<String>的输出。在对字符串记录进行一些操作之后,我想将其写入一个文件。我尝试过使用Collectors.toList()将其收集到一个列表中,它适用于较小的数据集。当我的文件有将近100万行(记录(,列表无法容纳那么多记录时,就会出现问题。

// Read the file using Files.lines and collect it into a List
List<String> stringList = Files.lines(Paths.get("<inputFilePath>"))
.map(line -> line.trim().replaceAll("aa","bb"))
.collect(Collectors.toList());

//  Writes the list into the output file
Files.write(Paths.get("<outputFilePath>"), stringList);

我正在寻找一种方法,可以读取一个大文件,对其进行操作(就像我的示例中的.map()方法中所做的那样(,并将其写入文件,而无需将其存储到List(或集合(中。

您可以尝试以下操作(更新代码以关闭资源(:

try (BufferedWriter writer = Files.newBufferedWriter(Path.of(outFile), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
Stream<String> lines = Files.lines(Path.of(inFile))) {
// Read the file using Files.lines and collect it into a List
lines.map(line -> line.trim().replaceAll("aa", "bb"))
.forEach(line -> {
try {
writer.write(line);
writer.newLine();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
});
writer.flush();
}

最新更新