Files.walkFileTree简介

Android  小知识  2024年4月12日 pm2:32发布8个月前更新 城堡大人
117 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/biumall.com
    walkFileTree visitFile file : /storage/emulated/0/biumall.com/91escom.txt
    walkFileTree visitFile file : /storage/emulated/0/biumall.com/biumall.com.txt

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

    demo 2

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

    调用

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

    日志打印

    walkFileTree preVisitDirectory path : /storage/emulated/0

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

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

    参考文章

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

 历史上的今天

  1. 2023: RecyclerView对Item拖动和上下滑动记录(0条评论)
  2. 2022: Android反编译之vdex转dex查看源码(0条评论)
  3. 2021: 中文汉字和英文数字的unicode编码范围(0条评论)
  4. 2020: 冰心:一日的春光(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

1 条评论

  • 偶然
    偶然 游客

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

    回复

随机推荐

梁文道 :清贫与富贵

我在台湾念小学的时候,有一个同学是军人子弟,他的父亲大概很早就退伍了,所以没有领到太多的长俸和福利,后来务农为生,日子过得很辛苦。虽然贫困,但他家的桌子总是擦得一尘不染,厕所地板亮得反光。每次到他家吃饭,我都震慑于老伯伯一口洪亮的山东腔,以及他那威严的仪容。而他的孩子,我这位同学,尽管一身旧衣早...

设计模式:装饰模式或包装模式

什么是设计模式装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。有透明和半透明两种,大部分都是半透明的,半透明的装饰模式是介于装饰模式和适配器模式之间的。装饰模式的核心:功能扩展。透明和半透明的区别:透明的装饰模式,要求具体构件角色、装饰角色的接...

Bing(必应)不收录网站或被K的申诉方法

前言简单记录一下Bing不收录或被kill问题。我这站之前是有收录的,不知道为啥突然Bing不显示收录的内容了。正文这里只是记录一下,以前被kill也是这样解决的。第一步登入Bing站长工具官网https://www.bing.com/webmasters/home如果没有注册就新注...

Kotlin集合简介

前言简单记录一下Kotlin集合的使用以及如何遍历List,Set和Map,记录于此,方便自己查阅。正文集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map。CollectionCollection是所有单列集合的父接口,List和Set是其子类。Lis...

顾城:门前

我多么希望,有一个门口早晨,阳光照在草上 我们站着扶着自己的门扇门很低,但太阳是明亮的 草在结它的种子风在摇它的叶子我们站着,不说话就十分美好 有门,不用开开是我们的,就十分美好

Android 判断字符串是否乱码

前言前文《[代码片段]使用jaudiotagger解析ID3信息》中知道,解析出的ID3信息的文本存在乱码,部分ID3信息可以通过文本编码转换,但还是存在部分文本无法转成功。因此在项目中考虑直接过滤依旧是乱码的,同时把ID3信息置为未知。正文下面的方法可以转换jaudiotagger解析出...