微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关闭流而不将其分配给变量 [Java]

如何解决关闭流而不将其分配给变量 [Java]

我正在使用 nio Files.lines 方法读取一个文件,并将其写入另一个文件

BufferedWriter writer = Files.newBufferedWriter(Path.of(outFile);

         Files.lines(Path.of(inputFile))
                .forEach(line -> {
                    try {
                        writer.write(line);
                        writer.newLine();
                    } catch (IOException e) {
                        throw new UncheckedioException(e);
                    }
                });
        writer.flush();
        writer.close();
    

我想在 finally 块中关闭编写器和流 (Files.lines)。 我知道我必须将这个片段括在 try-catch-finally 块中,但是如何在不将其分配给变量的情况下关闭流?

解决方法

不要做大量的手动工作,只需使用以下代码片段(正如您在评论中已被告知的那样):

Files.copy(Path.of(inputFile),Path.of(outFile)));

如果您出于某种原因仍想手动执行此操作,请使用 try-with-resources。您仍会将 BufferedWriter 分配给变量,但无需显式关闭它。 Java 会自己做到这一点:

try(BufferedWriter writer = Files.newBufferedWriter(Path.of(outFile));
    Stream<String> lines = Files.lines(Path.of(inputFile))) {
    // ... do something with your lines & writer here
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。