Files.newDirectoryStream与Files.list

Seb*_*n S 7 java nio java-8 java-stream

我知道Files.list(路径)使用Files.newDirectoryStream(路径)内部,基本上只是包装的DirectoryStream.

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

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

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

Tag*_*eev 16

  1. 这通常是一种风格问题.如果要使用外部迭代(for(Path path : dirStream))使用newDirectoryStream.如果你想利用流API操作(如优势map,filter,sorted,等),使用list来代替.

  2. 区别在于异常处理.Files.list遍历期间发生的任何异常都将转换DirectoryIteratorExceptionUncheckedIOException.另一个细微差别是分裂器明确地报告了DISTINCT特征,所以如果你这样做Files.list().distinct(),distinct()步骤将被优化(因为已经知道元素是不同的).使用Iterable.spliterator()默认实现时,不会执行此优化.

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