【发布时间】:2021-03-03 07:23:14
【问题描述】:
我正在使用 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)。
我知道我必须将这个 sn-p 包围在一个 try-catch-finally 块中,但是如何在不将其分配给变量的情况下关闭流?
【问题讨论】:
-
如果不将其分配给变量,您将无法关闭。你怎么能写它,而不分配给一个变量?
-
使用
Files.copy(Path.of(inputFile), Path.of(outFile))。将文件的字节解码为字符,识别换行符,将文本分解为行字符串,在编写器的缓冲区中再次连接行,并在您可以首先按原样复制字节时再次将其编码为字节是没有意义的.特别是对于“大文件”。 -
@GauthamM 因为
Files.lines(…)的规范是这样说的:“此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保关闭流的打开文件在流的操作完成后立即进行。” -
这能回答你的问题吗? Close Java 8 Stream
标签: java java-8 java-stream try-with-resources