Java 以流的形式检索文件

Java 以流的形式检索文件,用户希望将目录中的所有文件作为 Stream 进行处理,使用 java.nio.file.Files 类定义的静态方法 listlist 方法传入 Path 作为参数,并返回一个包装 DirectoryStream4Stream

Java 以流的形式检索文件 问题描述

用户希望将目录中的所有文件作为 Stream 进行处理。

Java 以流的形式检索文件 解决方案

使用 java.nio.file.Files 类定义的静态方法 list

Java 以流的形式检索文件 具体实例

list 方法传入 Path 作为参数,并返回一个包装 DirectoryStream4Stream。由于 DirectoryStream 接口继承自 AutoCloseabletry-with-resources 构造是使用 list 方法的最佳方式,如例 7-6 所示。
4这是一个 IO 流而非函数式流。

例 7-6 Files.list(path) 方法的应用

try (Stream<Path> list = Files.list(Paths.get("src/main/java"))) {
    list.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

如果在具有标准 Maven 或 Gradle 结构的项目根目录下执行上述代码,程序将打印 src/ main/java 目录中所有文件和文件夹的名称。使用 try-with-resources 代码块,当 try 代码块执行完毕后,系统将在 Stream 上调用 close 方法,然后在底层 DirectoryStream 上调用 close 方法。请注意,目录和文件不是递归的。
执行本书配套的源代码(例 7-6),程序将输出目录和单个文件:

src/main/java/collectors
src/main/java/concurrency
src/main/java/datetime
...
src/main/java/Summarizing.java
src/main/java/tasks
src/main/java/UseFilenameFilter.java

list 方法的签名如下,其返回类型为 Stream<Path>,参数为目录的路径:

public static Stream<Path> list(Path dir) throws IOException

请注意,对非目录资源执行 list 方法将抛出 NotDirectoryException
Javadoc 指出,list 方法返回的流具备弱一致性(weak consistency)。换言之,“流是线程安全的,但在迭代时不会冻结目录,因此它可能会(也可能不会)反映 list 方法返回后所发生的目录更新”。

赞(1)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Java 实例