将流< string>写入java文件

ldfqzlk8  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(432)

我正在用javanio包的 Files.lines() 方法,该方法提供类型为的输出 Stream<String> . 在对字符串记录进行一些操作之后,我想将其写入一个文件。我试着用 Collectors.toList() ,它适用于较小的数据集。当我的文件有将近一百万行(记录)时,问题就出现了,列表不能容纳那么多的记录。

// 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() 方法),并将其写入文件,而不将其存储到列表(或集合)中。

lokaqttq

lokaqttq1#

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

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();
    }

相关问题