设计思路
- 使用
DirectoryStream
:DirectoryStream
是Java NIO.2中用于遍历目录内容的接口,它可以以流的方式逐个读取目录项,避免一次性加载大量数据到内存,从而防止内存溢出。
- 递归遍历子目录:为了遍历所有子目录,采用递归方式处理每个子目录。
- 异常处理:使用
try-catch
块捕获并处理在遍历过程中可能出现的IOException
(包括权限异常等I/O相关异常)。
关键代码片段
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 DirectoryTraversal {
public static void traverseDirectory(Path directory) {
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
for (Path entry : stream) {
if (Files.isDirectory(entry)) {
traverseDirectory(entry);
} else {
System.out.println(entry);
}
}
} catch (IOException e) {
// 处理I/O异常和权限异常等
System.err.println("Error accessing directory: " + e.getMessage());
}
}
public static void main(String[] args) {
Path startDirectory = Paths.get("/your/directory/path");
traverseDirectory(startDirectory);
}
}
代码说明
traverseDirectory
方法:
- 使用
try-with-resources
语句打开DirectoryStream
,确保流在使用完毕后正确关闭。
- 遍历
DirectoryStream
中的每个Path
。
- 如果
Path
指向一个目录,则递归调用traverseDirectory
方法继续遍历该子目录。
- 如果
Path
指向一个文件,则打印该文件的路径。
main
方法:
- 创建起始目录的
Path
对象,并调用traverseDirectory
方法开始遍历。
- 异常处理:在
catch
块中捕获IOException
,并打印错误信息,以处理遍历过程中可能出现的各类I/O相关异常,包括权限异常。