Files.newDirectoryStream与Files.list

时间:2015-11-12 10:06:37

标签: java java-8 nio java-stream

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

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

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

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

1 个答案:

答案 0 :(得分:14)

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

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

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