ski*_*iwi 13 java java-8 java-stream
请考虑以下代码:
Path directory = Paths.get(/* some directory */);
Files.list(directory).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
终端操作(如forEach)是否关闭已打开的基础文件?
请参阅Files.list的javadoc的相关部分:
返回的流封装了DirectoryStream.如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作完成后调用流的close方法.
如果它没有调用Stream.close(),那么在生成可维护代码时调用它的最佳选择是什么?
Dav*_*ove 20
终端运营商不会自动关闭流.考虑以下代码:
Stream<Path> list = Files.list(directory).onClose(() -> System.out.println("Closed"));
list.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这不会打印"已关闭".
但是,以下打印"已关闭":
try (Stream<Path> list = Files.list(directory).onClose(() -> System.out.println("Closed"))) {
list.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
因此,最好的方法是使用try-with-resources机制.
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |