Java 遍历目录树:两种方法详解
Java 遍历目录树:两种方法详解
遍历一个目录中的所有子文件和子目录,包括子目录中的子文件,是常见的文件操作需求。Java 提供了多种方法实现此功能,本文将介绍两种常用的方法:使用 Files.walk() 方法和递归遍历。
方法一:使用 Files.walk() 方法
Files 类中的 walk() 方法可以方便地遍历一个目录及其子目录中的所有文件和目录。该方法返回一个 Stream
示例代码:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class TraverseDirectoryTree {
public static void main(String[] args) throws IOException {
Path rootPath = Paths.get('D:/test'); // 要遍历的根目录
Files.walk(rootPath) // 遍历根目录及其子目录中的所有文件和目录
.forEach(path -> {
if (Files.isDirectory(path)) { // 如果是目录
System.out.println('目录:' + path);
} else { // 如果是文件
System.out.println('文件:' + path);
}
});
}
}
方法二:递归遍历目录树
递归遍历目录树是一种常见的方法,也比较容易理解。递归函数需要处理当前目录下的文件和目录,如果是目录则递归调用自身处理子目录,直到所有文件和目录都被处理完。
示例代码:
import java.io.File;
public class TraverseDirectoryTree {
public static void main(String[] args) {
File rootDir = new File('D:/test'); // 要遍历的根目录
traverseDirectory(rootDir);
}
private static void traverseDirectory(File dir) {
System.out.println('目录:' + dir.getAbsolutePath());
File[] files = dir.listFiles(); // 获取当前目录下的所有文件和目录
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) { // 如果是目录,则递归处理子目录
traverseDirectory(file);
} else { // 如果是文件,则输出文件路径
System.out.println('文件:' + file.getAbsolutePath());
}
}
}
}
}
注意事项
递归遍历目录树时需要注意栈溢出的问题,如果目录树过深可能会导致栈溢出。可以使用循环代替递归遍历,或者增加堆栈大小来解决该问题。
原文地址: https://www.cveoy.top/t/topic/m6O7 著作权归作者所有。请勿转载和采集!