http://www.cnblogs.com/LiuChunfu/p/5651956.html

一、引言

Apache提供的很多工具方法非常好用,推荐。

今天在使用的过程中使用到了org.apache.commons.io.FileUtils.listFiles方法,本文主要谈谈这个工具方法的用法。

查看源码上的说明是

    /*** Finds files within a given directory (and optionally its* subdirectories). All files found are filtered by an IOFileFilter.* <p>* If your search should recurse into subdirectories you can pass in* an IOFileFilter for directories. You don't need to bind a* DirectoryFileFilter (via logical AND) to this filter. This method does* that for you.* <p>* An example: If you want to search through all directories called* "temp" you pass in <code>FileFilterUtils.NameFileFilter("temp")</code>* <p>* Another common usage of this method is find files in a directory* tree but ignoring the directories generated CVS. You can simply pass* in <code>FileFilterUtils.makeCVSAware(null)</code>.** @param directory  the directory to search in* @param fileFilter filter to apply when finding files.* @param dirFilter  optional filter to apply when finding subdirectories.*                   If this parameter is {@code null}, subdirectories will not be included in the*                   search. Use TrueFileFilter.INSTANCE to match all directories.* @return an collection of java.io.File with the matching files* @see org.apache.commons.io.filefilter.FileFilterUtils* @see org.apache.commons.io.filefilter.NameFileFilter*/

大意就是:

在指定的目录中(可以指定到子目录)通过IOFileFilter过滤器查找文件。
比如:
如果你要在所有的名为"temp"的目录,你可以使用:FileFilterUtils.NameFileFilter("temp")

二、基本使用

测试目录下的目录结构如下所示: 

M:\FileTest
│      5.txt
├─001
│ │    1.txt
│ │    2.txt
│ │
│ └─011
│      bc.eddx
│      d.docx
│
└─0023.txt4.txt

最开始仅仅想获取目录下的文件,如下方法:

        Collection<File> listFiles = FileUtils.listFiles(new File("M:/FileTest"), null, null);for (File file : listFiles) {System.out.println(file.getName());}

此处会抛出错误:

其源码如下:Parameter 'fileFilter' is null"

    private static void validateListFilesParameters(final File directory, final IOFileFilter fileFilter) {if (!directory.isDirectory()) {throw new IllegalArgumentException("Parameter 'directory' is not a directory: " + directory);}if (fileFilter == null) {throw new NullPointerException("Parameter 'fileFilter' is null");}}

可以看出,第二个针对文件的过滤器不可以为空。

换成第二种做法:利用FileFilterUtils进行文件过滤器的创建。下面代码中使用到了 FileFilterUtils.suffixFileFilter("txt") 表示过滤出文件名后缀为txt的文件,第三个参数表示通常表示是否递归查询目录,null表示递归。

    @Testpublic void test2(){Collection<File> listFiles = FileUtils.listFiles(new File("M:/FileTest"), FileFilterUtils.suffixFileFilter("txt"), null);showFiles(listFiles);}private void showFiles(Collection<File> listFiles) {if (listFiles==null) {return;}for (File file : listFiles) {System.out.println(file.getName());}}

上述方法结果是:

5.txt

稍微修改下最后一个参数,将其由null转变为DirectoryFileFilter.INSTANCE,方法将使用递归的形式来进行文件过滤扫描。

    @Testpublic void test3(){Collection<File> listFiles = FileUtils.listFiles(new File("M:/FileTest"), FileFilterUtils.suffixFileFilter("txt"), DirectoryFileFilter.INSTANCE);showFiles(listFiles);}

结果为:

1.txt
2.txt
3.txt
4.txt
5.txt

这里需要注意,如果仅仅是过滤后缀,Apache提供了更加简单的方法:

    @Testpublic void test4(){Collection<File> listFiles = FileUtils.listFiles(new File("M:/FileTest"), new String[]{"txt"}, true);showFiles(listFiles);}

方法说明参见上图,此处时间关系不在赘述。

三、常见文件过滤器

从其中最灵活的方法签名中可以得到一些信息:

第二个参数是IOFilFilter fileFilter,通过查看源码的形式可以知道其为一个接口

很显然我们查看这个接口有哪些实现类就可以获得由那些FileFilter。

从上述图的记过可以看出有基于文件大小的SizeFileFilter,基于文件名称前缀的PrefixFileFilter...,具体使用情况,依照自己项目情况选择,我这里就不一一举例了(0.0 其实我也没有全部用过~~~)

    @Testpublic void test5(){Collection<File> listFiles = FileUtils.listFiles(new File("M:/FileTest"), FileFilterUtils.and(EmptyFileFilter.NOT_EMPTY,new RegexFileFilter("^[0-9]+.[a-zA-z]+$")), DirectoryFileFilter.INSTANCE);showFiles(listFiles);}

因为我的目录中只有5.txt有点内容,所以最终的结果是5.txt,上面代码中注意

FileFilterUtils.and(EmptyFileFilter.NOT_EMPTY,new RegexFileFilter("^[0-9]+.[a-zA-z]+$"))

其中表示有2个文件过滤器,其中一个是不为空的文件过滤器,另外一个是查找文件名称的过滤器,其匹配规则是:"^[0-9]+.[a-zA-z]+$" 即文件名称只能是一个或者多个数字构成,后缀由一个或多个字母构成。

~~Over

本次博文算是我最用心的一次了。。。。

Apache下的FileUtils.listFiles方法简单使用技巧相关推荐

  1. java touch创建文件_Java FileUtils.touch方法代碼示例

    本文整理匯總了Java中org.apache.commons.io.FileUtils.touch方法的典型用法代碼示例.如果您正苦於以下問題:Java FileUtils.touch方法的具體用法? ...

  2. linux apache 大文件,Apache下error.log文件太大的处理方法

    Apache下error.log文件太大的处理方法 2019年05月03日 | 萬仟网网络运营 | 我要评论 清除error.log.access.log并限制apache日志文件大小的方法 有个客户 ...

  3. php mysql环境 xp_MySQL_XP环境下安装apache+php+mysql,Apache和mysql的安装较简单,主 - phpStudy...

    XP环境下安装apache+php+mysql Apache和mysql的安装较简单,主要是安装前请保证80端口未被占用 比如 iis 以前安装过的apache mysql 先停止运行phpmyadm ...

  4. java apache fileutil_Java FileUtil.listFiles方法代码示例

    import org.apache.hadoop.fs.FileUtil; //导入方法依赖的package包/类 @Override public boolean delete(Path p, bo ...

  5. php apache 配置文件,Linux下apache支持PHP配置文件的方法

    本文用来记忆整了两天的lamp环境,如果对PHP没有要求建议全部用yum 一键安装,纯属个人经验,主要作用是用来参考的. yum install httpd #yum 安装Apache. php编译安 ...

  6. Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法

    Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法 参考文章: (1)Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法 (2)https:// ...

  7. Anaconda 下安装xgboost的最简单最快速方法

    ** 标题 Anaconda 下安装xgboost的最简单最快速方法## ** tips:xgboost安装的最佳方法 笔者曾苦恼于xgboost的安装,各种失败,然后花了一整天去网上搜,阅读过上百篇 ...

  8. linux下安装小企鹅输入法简单方法(转载)

    linux下安装小企鹅输入法简单方法(转载) 1.到www.fcitx.org下载fcitx,我下载的是预编译包fcitx-3.1.1.bin.tar.bz2最新稳定版 2.tar xjvf fcit ...

  9. File类(常用方法、遍历目录下的文件、listFiles()方法和删除文件及目录)

    File类 File类的常用方法 Filie类常用的构造方法 File(String pathname) //通过指定的一个字符串类型的文件路径来创建一个新的File对象 File(String pa ...

  10. Windows下phpStudy中的Apache无法启动的解决方法

    我的电脑之前单独安装的是 PHP5.4,所以就使用了phpStudy 的集成环境,一次性安装,无须配置就可以使用,是非常方便.好用的 PHP 调试环境.现在官网已经使用 2018 版本了,而我还是使用 ...

最新文章

  1. keras 的 example 文件 babi_rnn.py 解析
  2. 《Unity开发实战》——2.2节创建画中画效果
  3. 使用MarkDown画矩阵
  4. 树结构遍历节点名字提取,这里提取的是el-tree数据结构,封装成函数
  5. anaconda镜像
  6. JS获取页面元素并修改
  7. 【渝粤教育】国家开放大学2018年秋季 0691-21T物理化学及实验 参考试题
  8. 基于easyui开发Web版Activiti流程定制器详解(一)——目录结构
  9. redis基本数据类型之String
  10. 洛谷P2089 烤鸡 题解
  11. 6*6行列式相加的c语言,求行列式的值,用C语言怎么写啊?
  12. 经典SQL语句大全(转)
  13. 还原真实的 cache recovery
  14. 关于vs2017如何配置和运行龙书DX9案例
  15. 当vs2005番茄助手试用过期,并报错的解决方法
  16. 仿秒秒测日历页面和部分功能
  17. 【苹果开发者账号】记一次苹果账号付款失败,报 未完成付款 的问题,全网都没解决办法!
  18. CSS3 经典教程系列:CSS3 线性渐变(linear-gradient)
  19. 一些奇怪的东西以及寄几需要注意的地方
  20. ubuntu 安装 hustoj

热门文章

  1. 关于Firefox浏览器设置默认字体的教程
  2. Android自定义控件之自定义倒计时按钮
  3. 【Flutter】如何新建项目,运行你的第一个 flutter 工程项目
  4. MS Office 冷门却实用的技巧及软件安装包分享(文末有福利)
  5. 利用微查询和数据锐化进行大数据探索
  6. LVM 的创建,扩展,缩减及建立快照
  7. [20150913]文件检查点_热备份.txt
  8. Spring MVC 3.0 深入
  9. outlook与shairepoint2010 数据同步
  10. eclipse 中System.out快捷键设定