原文:http://zetcode.com/java/directorystream/
Java DirectoryStream教程显示了如何使用DirectoryStream遍历目录。
DirectoryStream是要遍历目录中条目的对象。 目录流允许方便地使用for-each构造来遍历目录。
Files.newDirectoryStream打开目录,返回DirectoryStream以遍历目录中的所有条目。
Java DirectoryStream示例
第一个示例列出了当前目录。
DirectoryStreamEx.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
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
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
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 创建目录,用 Java 复制文件, Java DirectoryStream教程, Java Files.walk教程, Java Files.list教程,用 Java 创建文件和 Java 教程。
