Java NIO 中遍历目录核心是 Files.walk()(递归)和 Files.list()(单层),需注意资源关闭、异常处理及路径操作技巧。

Java NIO 中用 Paths 和 Files 遍历目录,核心是使用 Files.walk() 或 Files.list(),配合路径构造和过滤逻辑,比传统 IO 更简洁、支持函数式风格。
用 Files.walk() 递归遍历整个目录树
Files.walk() 返回一个 Stream<path></path>,默认深度优先、递归遍历所有子目录和文件。它会自动处理符号链接(默认不跟随),适合需要完整目录结构的场景。
- 基本用法:
Files.walk(Paths.get("/tmp"))—— 遍历 /tmp 下所有层级 - 限制深度:
Files.walk(Paths.get("/home"), 2)—— 只遍历根目录 + 两层子目录 - 配合 filter 筛选文件:
.filter(Files::isRegularFile)排除目录 - 注意:必须 try-with-resources 或显式 close 流,否则可能泄露文件句柄(尤其大目录)
用 Files.list() 遍历单层目录内容
Files.list() 只列出指定目录下的一级条目(不递归),返回 Stream<path></path>,性能开销小,适合快速获取当前目录内容。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 示例:
Files.list(Paths.get("."))列出当前目录所有文件/子目录 - 需手动处理异常:
IOException(如权限不足、路径不存在) - 不能直接用于递归;若要递归,需配合
Files.isDirectory()+ 手动调用自身或使用 walk
安全遍历:处理异常与跳过不可访问路径
真实环境中常遇到权限拒绝、循环符号链接或 I/O 错误。Files.walk() 默认遇到异常会中断。可通过自定义 FileVisitor 或用 Files.walkFileTree() 更精细控制。
立即学习“Java免费学习笔记(深入)”;
- 推荐方式:用
Files.walkFileTree()+ 实现SimpleFileVisitor - 重写
visitFileFailed()方法,返回FileVisitResult.CONTINUE继续遍历 - 重写
preVisitDirectory()可跳过特定目录(如.git) -
Paths.get()仅构建路径对象,不检查存在性;真正操作(如 walk/list)才触发 I/O 和异常
实用小技巧:路径拼接与类型判断
Paths.get() 支持多段拼接,Path 对象自带类型判断方法,避免字符串匹配。
- 拼接路径:
Paths.get("/var", "log", "app.log")→/var/log/app.log(自动适配系统分隔符) - 判断类型:
path.toFile().isDirectory()或更 NIO 的写法Files.isDirectory(path) - 获取文件名:
path.getFileName();获取父目录:path.getParent() - 过滤隐藏文件:
.filter(p -> !p.getFileName().toString().startsWith("."))

















