[NIO.2] 第三十一篇 FileVisitor 接口

FileVisitor 接口提供了递归遍历文件树的支持。这个接口上的方法表示了遍历过程中的关键过程,允许你在文件被访问、目录将被访问、目录已被访问、发生错误等等过程上进行控制;换句话说,这个接口在文件被访问前、访问中和访问后,以及产生错误的时候都有相应的钩子程序进行处理。

调用 FileVisitor 中的方法,会返回访问结果 FileVisitResult 对象值,用于决定当前操作完成后接下来该如何处理。FileVisitResult 的标准返回值存放到 FileVisitResult 枚举类型中:

[list]
[*] FileVisitResult.CONTINUE:这个访问结果表示当前的遍历过程将会继续。
[*] FileVisitResult.SKIP_SIBLINGS:这个访问结果表示当前的遍历过程将会继续,但是要忽略当前文件/目录的兄弟节点。
[*] FileVisitResult.SKIP_SUBTREE:这个访问结果表示当前的遍历过程将会继续,但是要忽略当前目录下的所有节点。
[*] FileVisitResult.TERMINATE:这个访问结果表示当前的遍历过程将会停止。
[/list]

上面的所有枚举值可以通过下面的代码进行遍历:

for (FileVisitResult constant : FileVisitResult.values())
System.out.println(constant);


接下来介绍 FileVisitor 接口上的方法。

[b][size=x-large]FileVisitor.visitFile() 方法[/size][/b]

visitFile() 将会在访问目录中的文件的时候被调用。这个方法通常返回 CONTINUE 和 TERMINATE 结果。例如,当你在搜索某个文件的时候,你需要一直返回 CONTINUE 直到文件被找到或已经搜索完所有的文件,一旦文件被找到,就返回 TERMINATE。

当这个方法被调用的时候,它接受文件引用和文件基本属性两个参数。一旦发生 I/O 错误,将会抛出 IOException 异常。下面是这个方法的签名:

FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException

[b][size=x-large]
FileVisitor.preVisitDirectory() 方法[/size][/b]

preVisitDirectory() 在访问目录中的节点之前被调用。如果返回 CONTINUE 那么将会继续访问,如果返回 SKIP_SUBTREE(只有在这个方法中返回这个值才有意义),那么将会掉过当前目录继续访问。也可以返回 SKIP_SIBLINGS 跳过访问当前目录的所有兄弟节点。

当这个方法被调用,它将接受目录引用和目录基本属性两个参数。方法签名为:

FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException


[b][size=x-large]postVisitDirectory() 方法[/size][/b]

postVisitDirectory() 将会在目录中所有节点(包括所有子节点)都被访问或访问过程立即停止(可能是发生 I/O 异常,也可能是在在程序中强制停止)的时候被调用。

当这个方法被调用的时候,它接受文件引用和 IOException 两个参数。如果没有异常产生,那么 IOException 的值将会是 null。这个方法的方法签名是:

FileVisitResult postVisitDirectory(T dir, IOException exc) throws IOException


[b][size=x-large]FileVisitor.visitFileFailed() 方法[/size][/b]

visitFileFailed() 方法将会在不能访问文件的时候被调用。不能访问文件的原因可能是没有访问权限或是目录不能打开。这个方法被调用时接受访问文件的引用和访问文件时产生的 IOException 两个参数。这个方法的方法签名如下:

FileVisitResult visitFileFailed(T file, IOException exc) throws IOException


文章来源:[url]http://www.aptusource.org/2014/04/nio-2-filevisitor-interface/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值