Files.newDirectoryStream与Files.list

我知道Files.list(Path)在内部使用Files.newDirectoryStream(Path) ,基本上只包装DirectoryStream。

  1. 但是我不明白,当我想使用第一个或后一个时。

  2. 如果我想使用流API,这只是一种方便的方法吗? 我本可以做到这一点相当容易, 看到这个问题 。

  3. 如果查看Files.list的实现,内部DirectoryStream抛出的exception将包含在UncheckedIOException 。 我应该知道的任何事情吗?

  1. 这通常是一种风格问题。 如果要使用外部迭代( for(Path path : dirStream) ),请使用newDirectoryStream 。 如果您想利用Stream API操作(如mapfiltersorted等),请使用list

  2. 不同之处在于exception处理。 Files.list遍历期间发生的任何exceptionFiles.listDirectoryIteratorException转换为UncheckedIOException 。 另一个细微差别是spliterator显式报告DISTINCT特性,因此如果你执行Files.list().distinct() ,则distinct()步骤将被优化(因为已经知道元素是不同的)。 使用Iterable.spliterator()默认实现时,不会执行此优化。

  3. 这里没什么特别的。 您应该期望UncheckedIOException可能会在终端流操作执行过程中弹出(例如,由于访问网络文件夹时网络超时)。