Files.walkFileTree简介

Android2024年4月12日 pm2:32发布2个月前更新 3XCN.COM站长
0 1 0
广告也精彩
目录

  1. 前言

    简单记录一下Files.walkFileTree()的使用。

    在Android sdk版本大于 Build.VERSION_CODES.O中可以使用。

    正文

    Files.walkFileTree()中方法有两个

    # 第一个
    public static Path walkFileTree(Path start, FileVisitor<? super Path> visitor)
        throws IOException
    {
        return walkFileTree(start,
                            EnumSet.noneOf(FileVisitOption.class),
                            Integer.MAX_VALUE,
                            visitor);
    }
    # 第二个
    public static Path walkFileTree(Path start,
                                    Set<FileVisitOption> options,
                                    int maxDepth,
                                    FileVisitor<? super Path> visitor)
        throws IOException
    {
        //略
    }

    第一个也是调用第二个方法。

    walkFileTree

    这里就以第一个为例

    public static Path walkFileTree(Path start, FileVisitor<? super Path> visitor)
        throws IOException
    {
        return walkFileTree(start,
                            EnumSet.noneOf(FileVisitOption.class),
                            Integer.MAX_VALUE,
                            visitor);
    }

    需要传入两个参数:

    1. Path:文件起始路径

    2. FileVisitor:文件访问器,使用访问者模式

    FileVisitor

    FileVisitor是一个文件访问器,调用walkFileTree()方法后,会自动遍历start路径下的所有文件和子目录,遍历文件和子目录都会触发FileVisitor中相应的方法。

    FileVisitor方法
    public interface FileVisitor<T> {
        //访问目录前的操作
        FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
            throws IOException;
        //访问文件的操作
        FileVisitResult visitFile(T file, BasicFileAttributes attrs)
            throws IOException;
        //访问文件失败时的操作
        FileVisitResult visitFileFailed(T file, IOException exc)
            throws IOException;
        //访问目录后的操作
        FileVisitResult postVisitDirectory(T dir, IOException exc)
            throws IOException;
    }

    上面方法不一定都要重写,选择自己需要的即可。

    FileVisitResult

    返回FileVisitResult是⼀个枚举

    1. CONTINUE 代表继续访问的后续⾏为

    2. SKIP_SIBLINGS 代表继续访问的后续⾏为,但不访问该⽂件后⽬录的兄弟⽂件或⽬录

    3. SKIP_SUBTREE 代表继续访问的后续⾏为,但不访问该⽂件或⽬录的⼦⽬录树

    4. TERMINATE 代表终⽌访问的后续⾏为

    小试牛刀

    这里用了FileVisitor的实现类SimpleFileVisitor为例。

    demo 1

    隐藏内容!
    评论后才能查看!

    调用

    walkFileTree("/storage/emulated/0");

    日志打印

    walkFileTree preVisitDirectory path : /storage/emulated/0
    walkFileTree preVisitDirectory path : /storage/emulated/0/91es
    walkFileTree preVisitDirectory path : /storage/emulated/0/91es-com
    walkFileTree visitFile file : /storage/emulated/0/91es-com/91escom.txt
    walkFileTree visitFile file : /storage/emulated/0/91es-com/91es-com.txt

    上面访问目录和文件都是返回FileVisitResult.CONTINUE,所以会继续访问,直到访问结束

    demo 2

    隐藏内容!
    评论后才能查看!

    调用

    walkFileTree("/storage/emulated/0");

    日志打印

    walkFileTree preVisitDirectory path : /storage/emulated/0

    访问目录就返回终止,不管文件访问返回啥,都不会继续访问。

    其他的组合就懒得写了,有需要的自己去验证。

    参考文章

    1. 使用Files工具类中的walkFileTree(Path, FileVisitor)方法对文件进行操作

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

1 条评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

  • 偶然
    偶然 游客

    不错,虽然流水文。
    我也偶尔写写,主要方便自己查阅。
    不错的习惯。

    广东省深圳市
    回复

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。