Files.walkFileTree简介

Android  小知识  2024年4月12日 pm2:32发布6个月前更新 91es.com站长
84 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. 2023: RecyclerView对Item拖动和上下滑动记录(0条评论)
  2. 2022: Android反编译之vdex转dex查看源码(0条评论)
  3. 2021: 中文汉字和英文数字的unicode编码范围(0条评论)
  4. 2020: 冰心:一日的春光(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

1 条评论

  • 偶然
    偶然 游客

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

    广东省深圳市
    回复

随机推荐

刘半农:叫我如何不想她

天上飘着些微云,地上吹着些微风。啊!微风吹动了我头发,教我如何不想她? 月光恋爱着海洋,海洋恋爱着月光。啊!这般蜜也似的银夜,教我如何不想她? 水面落花慢慢流,水底鱼儿慢慢游。啊!燕子你说些什么话?教我如何不想她? 枯树在冷风里摇。...

C语言之指针数组和数组指针

前言简单记录一下指针数组和数组指针之间的区别。正文由于很容易搞混,因此这里做一下记录。指针数组指针数组是指具有若干个相同存储类型和数据类型的[指针变量]构成的组合。指针数组的一般形式:存储类型 数据类型 * 指针数组名 [大小]//指针数组,类型是int * 所以叫int型指...

Android 创建1像素的悬浮窗口

前言创建一个1像素的悬浮窗口。代码记录于此,方便自己查阅。正文WindowManager弹窗提示时需要注意下,比如系统应用和非系统应用权限的不同、Android不同版本的权限申请不同等。需要配置SYSTEM_ALERT_WINDOW权限<uses-permission andro...

Google Nexus 7 adb devices时出现 ???????????? no permissions

我在使用Nexus 7平板时,在使用adb devices后出现如下:List of devices attached???????????? no permissions同时在DDMS中显示设备名也显示????????????,也无法显示进程名,无法查看log。解决方法如下:...

JNI之函数介绍二

前言今天介绍JNI中全局及局部引用,对象操作,访问对象的域等函数的操作。正文主要涉及全局及局部引用,对象操作,访问对象的域等常用函数。NewGlobalRef jobject NewGlobalRef(JNIEnv *env, jobject obj);建obj 参数所引用对象的新全局...

MediaScanner源码JNI介绍2

前言接上文《MediaScanner源码JNI介绍》介绍register_android_media_MediaScanner的registerNativeMethods()注册是在android_media_MediaPlayer.cpp中JNI_OnLoad,上次有个疑惑,哪何时加载JNI_...