我知道文件.列表(路径) http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#list-java.nio.file.Path- uses 文件.newDirectoryStream(路径) http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newDirectoryStream-java.nio.file.Path-在内部,基本上只是包装 DirectoryStream。
但是我不明白,当我想使用第一个或后一个时。
如果我想使用流 API,这只是一种方便的方法吗?我自己也可以很容易地做到这一点,看到这个问题 https://stackoverflow.com/questions/28806416/how-to-make-a-stream-from-a-directorystream/.
如果看一下实施Files.list
,内部 DirectoryStream 抛出的异常被包装在UncheckedIOException
。关于这件事我有什么应该知道的吗?
这通常是风格问题。如果你想使用外部迭代(for(Path path : dirStream)
) use newDirectoryStream
。如果您想利用 Stream API 操作(例如map
, filter
, sorted
等),使用list
反而。
区别在于异常处理。期间发生任何异常情况Files.list
遍历转换自DirectoryIteratorException
to UncheckedIOException
。另一个细微的区别是 spliterator 显式报告DISTINCT
特征,所以如果你这样做Files.list().distinct()
, the distinct()
步骤将被优化(因为已知元素是不同的)。使用时不会执行此优化Iterable.spliterator()
默认实现。
这里没什么特别的。你应该期待的是UncheckedIOException
可能会在终端流操作执行过程中弹出(例如由于访问网络文件夹时网络超时)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)