Files.newDirectoryStream与Files.list
我知道Files.list(Path)在内部使用Files.newDirectoryStream(Path) ,基本上只包装DirectoryStream。
-
但是我不明白,当我想使用第一个或后一个时。
-
如果我想使用流API,这只是一种方便的方法吗? 我本可以做到这一点相当容易, 看到这个问题 。
-
如果查看
Files.list
的实现,内部DirectoryStream抛出的exception将包含在UncheckedIOException
。 我应该知道的任何事情吗?
-
这通常是一种风格问题。 如果要使用外部迭代(
for(Path path : dirStream)
),请使用newDirectoryStream
。 如果您想利用Stream API操作(如map
,filter
,sorted
等),请使用list
。 -
不同之处在于exception处理。
Files.list
遍历期间发生的任何exceptionFiles.list
从DirectoryIteratorException
转换为UncheckedIOException
。 另一个细微差别是spliterator显式报告DISTINCT
特性,因此如果你执行Files.list().distinct()
,则distinct()
步骤将被优化(因为已经知道元素是不同的)。 使用Iterable.spliterator()
默认实现时,不会执行此优化。 -
这里没什么特别的。 您应该期望
UncheckedIOException
可能会在终端流操作执行过程中弹出(例如,由于访问网络文件夹时网络超时)。