java中file类遍历目录需先用isdirectory()校验路径有效性,再调用listfiles()获取一级子项数组(null表示无效/无权限,空数组表示目录为空),递归处理每个子项;推荐java 8+使用files.walk()替代,更安全简洁。

Java 中的 File 类提供了基础的文件和目录操作能力,遍历指定文件夹下的所有子文件与子目录,核心是利用 listFiles() 方法递归访问每个子目录。
获取并判断当前路径是否为目录
先用 new File(path) 创建对象,再通过 isDirectory() 确保它是目录;否则无法遍历。若路径不存在或不是目录,listFiles() 会返回 null,需提前判空避免空指针异常。
使用 listFiles() 获取子项数组
file.listFiles() 返回 File[],包含该目录下所有直接子文件和子目录(不包含隐藏文件,除非显式启用)。注意它只返回一级内容,不递归。
- 若返回
null,说明路径无效、无权限或不是目录 - 返回空数组(
length == 0)表示目录为空 - 遍历时可用
isFile()和isDirectory()区分类型
递归遍历所有层级
对每个子项:若是文件,直接处理;若是目录,则以它为新起点再次调用遍历方法。
示例逻辑(简化版):
void traverse(File dir) {
if (!dir.isDirectory()) return;
File[] children = dir.listFiles();
if (children == null) return;
for (File child : children) {
if (child.isFile()) {
System.out.println("文件: " + child.getAbsolutePath());
} else if (child.isDirectory()) {
System.out.println("目录: " + child.getAbsolutePath());
traverse(child); // 递归进入子目录
}
}
}
替代方案:使用 Files.walk(推荐 Java 8+)
虽然问题聚焦于 File 类,但值得提醒:Files.walk() 更简洁安全,自动处理符号链接、权限异常,并支持流式处理:
Files.walk(Paths.get("path")).forEach(System.out::println);- 可加
try-with-resources确保资源释放 - 能通过
filter轻松筛选文件或目录











