第一章Netty,walkfiletree

第一章Netty,walkfiletree

基于前文对 Path、Paths 及 NIO.2 文件操作体系的讨论,Files.walkFileTree 是 Java NIO.2 提供的用于‌递归遍历目录树‌的核心方法。它替代了传统 IO 中手动递归调用 File.listFiles() 的繁琐且易出错的方式,提供了更灵活、可控的文件搜索和处理机制。

一、核心概念与组件

  1. Files.walkFileTree
    作用‌:从起始目录开始,深度优先遍历所有子目录和文件。
    优势‌:支持‌剪枝‌(跳过某些目录)、‌过滤‌、‌异常处理‌以及‌控制遍历深度‌。
  2. FileVisitor 接口
    遍历行为的定义者。你需要实现该接口的四个方法来决定在遍历过程中遇到不同节点时的行为:

preVisitDirectory:访问目录‌前‌调用(可用于决定是否进入该目录)。
postVisitDirectory:访问目录‌后‌调用(所有子节点已处理完毕)。
visitFile:访问文件时调用(核心处理逻辑所在)。
visitFileFailed:访问文件失败时调用(如权限不足)。
3. FileVisitResult 枚举
控制遍历流程的返回值:

CONTINUE:继续遍历。
SKIP_SUBTREE:跳过当前目录及其子目录(需在 preVisitDirectory 返回)。
SKIP_SIBLINGS:跳过当前节点的兄弟节点。
TERMINATE:立即终止遍历。

简单代码先了解,统计git安装目前下有多少个文件和文件夹:

packagecom.example.demo;importjava.io.IOException;importjava.nio.file.*;importjava.nio.file.attribute.BasicFileAttributes;importjava.util.concurrent.atomic.AtomicInteger;publicclassTestWalkFileTrees{publicstaticvoidmain(String[]args)throwsIOException{AtomicIntegerdirCount=newAtomicInteger();AtomicIntegerfileCount=newAtomicInteger();Files.walkFileTree(Paths.get("D:\\java\\git\\Git"