Apache VFS(3): 文件过滤器和选择器

本系列文章导航

Apache VFS(1): 基本介绍

Apache VFS(2): 文件的监听和监控

Apache VFS(3): 文件过滤器和选择器

Apache VFS(4): 事件

Apache VFS(5): 使用它!

Apache VFS(6): 几个重要的概念性接口

Apache VFS(7): 文件管理器解析文件的方法

Apache VFS提供了FileFilter 接口和FileSelector 接口以及FileSelectInfo 接口。这三个接口很容易让人摸不着头脑,都声称是
遍历文件层次结构中用来选择文件的。只不过FileFilter说是直接的子文件 (direct children of the base)

FileSelectInfo
只有三个方法:

  1. getBaseFolder 返回遍历的根目录
  2. getDepth 返回文件相对根目录(Base Folder)的深度
  3. getFile 返回考虑的文件对象


FileFilter
FileFilter用来在遍历直接的子文件的过程中选择文件。只有一个方法: accept(FileSelectInfo info)
注意:使用FileSelectInfo对象作为参数

FileSelector
只有两个方法,都使用FileSelectInfo对象作为参数

  1. includeFile(FileSelectInfo info) 判断是否这个文件或者目录应该被选择,这个方法使用深度优先,首先检查子文件(that is, it is called for the children of a folder before it is called for the folder itself)
  2. traverseDescendents(FileSelectInfo info) 判断这个目录是否应该被遍历I,如果这个方法返回真的话,对每个这个目录的子文件都会调用includeFile(FileSelectInfo info)方法,并且每个子目录都递归遍历。对于一个目录,这个方法在includeFile方法调用之前调用。

FileSelector的实现类
Apache VFS 提供四个FileSelector实现类:

  1. AllFileSelector 顾名思义,将选择所有文件
  2. FileDepthSelector (int minDepth, int maxDepth) 选择特定深度的所有文件,以最小深度,最大深度为参数
  3. FileFilterSelector 选择所有给定文件对象的子文件。和FileFilter非常象。(那还要这个干什么??),可以接受一个FileFilter作为参数
  4. FileTypeSelector (FileType type) 选择特定类型的文件。不要被这个迷惑! Apache VFS的文件类型FileType对象只有FILE,FILE_OR_FOLDER, FOLDER, FILE_IMAGINARY 四种类型。就是文件,目录,文件或目录, 尚不存在的文件。

例子
 比如我们的任务是从根目录中选择所有的以“ABC-”开头的文件, 根目录为“/base/folder"


方法一:使用FileFilter:

FileFilter ff = new FileFilter()
{
public boolean accept(FileSelectInfo fileInfo)
{
FileObject fo = fileInfo.getFile();
return fo.getName().getBaseName().startsWith("ABC-");
}

};
VFS.getManager().resolveFile("/base/folder").findFiles(new FileFilterSelector(ff));

方法二:使用FileSelector:

FileSelector ff = new FileSelector()
{
public boolean includeFile(FileSelectInfo fileInfo) throws Exception
{
FileObject fo = fileInfo.getFile();
return fo.getName().getBaseName().startsWith("ABC-");
}

public boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception
{
return true;
}
};
VFS.getManager().resolveFile("/base/folder").findFiles(ff);

 

 文章来源:http://alartin.javaeye.com/blog/92101

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值