-
简单记录一下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); }
需要传入两个参数:
-
Path:文件起始路径
-
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是⼀个枚举
-
CONTINUE 代表继续访问的后续⾏为
-
SKIP_SIBLINGS 代表继续访问的后续⾏为,但不访问该⽂件后⽬录的兄弟⽂件或⽬录
-
SKIP_SUBTREE 代表继续访问的后续⾏为,但不访问该⽂件或⽬录的⼦⽬录树
-
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
访问目录就返回终止,不管文件访问返回啥,都不会继续访问。
其他的组合就懒得写了,有需要的自己去验证。
参考文章
-
《
-
历史上的今天
随机推荐
梁文道 :清贫与富贵
我在台湾念小学的时候,有一个同学是军人子弟,他的父亲大概很早就退伍了,所以没有领到太多的长俸和福利,后来务农为生,日子过得很辛苦。虽然贫困,但他家的桌子总是擦得一尘不染,厕所地板亮得反光。每次到他家吃饭,我都震慑于老伯伯一口洪亮的山东腔,以及他那威严的仪容。而他的孩子,我这位同学,尽管一身旧衣早...
设计模式:装饰模式或包装模式
什么是设计模式装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。有透明和半透明两种,大部分都是半透明的,半透明的装饰模式是介于装饰模式和适配器模式之间的。装饰模式的核心:功能扩展。透明和半透明的区别:透明的装饰模式,要求具体构件角色、装饰角色的接...
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解析出...
不错,虽然流水文。
我也偶尔写写,主要方便自己查阅。
不错的习惯。