-
简单记录一下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/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
访问目录就返回终止,不管文件访问返回啥,都不会继续访问。
其他的组合就懒得写了,有需要的自己去验证。
参考文章
-
《
-
历史上的今天
随机推荐
刘半农:叫我如何不想她
天上飘着些微云,地上吹着些微风。啊!微风吹动了我头发,教我如何不想她? 月光恋爱着海洋,海洋恋爱着月光。啊!这般蜜也似的银夜,教我如何不想她? 水面落花慢慢流,水底鱼儿慢慢游。啊!燕子你说些什么话?教我如何不想她? 枯树在冷风里摇。...
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_...
不错,虽然流水文。
我也偶尔写写,主要方便自己查阅。
不错的习惯。