使用FileVistor遍历文件和目录
在以前的Java版本中,如果程序要遍历指定⽬录的所有⽂件和⼦⽬录,则只能使⽤递归进⾏遍历,
但这种⽅法不仅复杂,⽽且灵活性也不⾼,有了Files⼯具类的帮助,现在可以使⽤更优雅的⽅式来遍历和⼦⽬录
-
FileVisitor参数代表的是一个文件访问器,walkFileTree()方法会自动遍历start路径下的所有文件和子目录,遍历文件和子目录都会触发FileVisitor中相应的方法
-
访问⼦⽬录之前会触发这个⽅法
FileVisitResult preVisitDirectory(T dir,BasicFileAttributes attrs)
-
访问⼦⽬录之后会触发这个⽅法
FileVisitResult postVisitDirectory(T dir,IOException exc)
-
访问file⽂件时触发该⽅法
FileVisitResult visitFile(T file,BasicFileAttributes attrs)
-
访问file⽂件失败时触发该⽅法
FileVisitResult visitFileFailed(T file,IOException exc)
返回FileVisitResult是⼀个枚举
- CONTINUE 代表继续访问的后续⾏为
- SKIP_SIBLINGS 代表继续访问的后续⾏为,但不访问该⽂件后⽬录的兄弟⽂件或⽬录
- SKIP_SUBTREE 代表继续访问的后续⾏为,但不访问该⽂件或⽬录的⼦⽬录树
- TERMINATE 代表终⽌访问的后续⾏为
实际开发中没有必要4个⽅法都要重写,可以通过FileVisitor的⼦类SimpleFileVisitor(适配器)来创建⾃⼰的⽂件访问器,选择性的重写⽅法