企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java `DirectoryStream`教程 原文:http://zetcode.com/java/directorystream/ Java `DirectoryStream`教程显示了如何使用`DirectoryStream`遍历目录。 `DirectoryStream`是要遍历目录中条目的对象。 目录流允许方便地使用`for-each`构造来遍历目录。 `Files.newDirectoryStream`打开目录,返回`DirectoryStream`以遍历目录中的所有条目。 ## Java `DirectoryStream`示例 第一个示例列出了当前目录。 `DirectoryStreamEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class DirectoryStreamEx { public static void main(String[] args) throws IOException { var dirName = Paths.get("C:/Users/Jano/Downloads"); try (var paths = Files.newDirectoryStream(dirName)) { paths.forEach(path -> System.out.println(path)); } } } ``` 该示例列出了指定目录的内容。 ## Java `DirectoryStream`遍历示例 我们可以对内容流应用简单的遍历操作。 `Files.newDirectoryStream()`的第二个参数是球形图案。 `DirectoryStreamGlobEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class DirectoryStreamGlobEx { public static void main(String[] args) throws IOException { var dirName = Paths.get("C:/Users/Jano/Downloads"); try (var paths = Files.newDirectoryStream(dirName, "*.pdf")) { paths.forEach(path -> System.out.println(path)); } } } ``` 该示例显示指定目录中的所有 PDF 文件。 ## Java `DirectoryStream`过滤器示例 可以使用`DirectoryStream.Filter`应用更复杂的过滤操作。 `DirectoryStreamFilterEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class DirectoryStreamFilterEx { public static void main(String[] args) throws IOException { DirectoryStream.Filter<Path> filter = file -> { return Files.size(file) < 100_000L && file.toString().endsWith(".jpg"); }; var dirName = Paths.get("C:/Users/Jano/Downloads"); try (var paths = Files.newDirectoryStream(dirName, filter)) { paths.forEach(path -> System.out.println(path)); } } } ``` 该示例显示了所有小于 100 KB 的 JPEG 图像。 ## Java `DirectoryStream`递归遍历 在下面的示例中,我们显示如何使用`DirectoryStream`递归遍历目录。 `DirectoryStreamRecursiveEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public class DirectoryStreamRecursiveEx { private static List<Path> paths = new ArrayList<>(); private static List<Path> walk(Path path) throws IOException { try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) { for (Path entry : stream) { if (Files.isDirectory(entry)) { walk(entry); } paths.add(entry); } } return paths; } public static void main(String[] args) throws IOException { var myPath = Paths.get("C:/Users/Jano/Downloads"); var paths = walk(myPath); paths.forEach(path -> System.out.println(path)); } } ``` 该示例以递归方式遍历目录。 在本教程中,我们使用`Files.newDirectoryStream()`列出目录内容。 您可能也对相关教程感兴趣。 [Java 文件教程](/java/file/), [Java 创建目录](/java/createdirectory/),[用 Java 复制文件](/java/copyfile/), [Java `DirectoryStream`教程](/java/directorystream/), [Java `Files.walk`教程](/java/fileswalk/), [Java `Files.list`教程](/java/fileslist/),[用 Java 创建文件](/java/createfile/)和 [Java 教程](/lang/java/)。