Java利用FileFilter过滤文件
package cn.com;import java.io.File;import java.io.FileFilter;import java.util.ArrayList;import java.util.List;//问题描述:统计某个文件夹下,满足条件的文件个数//1 利用FileFilter过滤出满足条件的文件//2 if (file.isDirectory()|| (file.isFile() && file.getName().contains(keyword)))// 当该文件是目录或者该文件名包含关键字则返回true// 2.1文件名包含关键字当然是结果之一// 2.2如果是目录,则需要再后面递归调用该方法.//3 注意递归的使用public class FileTest { static int filesCount = 0; static int foldersCount = 0; List<File> filesArrayList = new ArrayList<File>();public static void main(String[] args) {FileTest fileTest=new FileTest();File folder = new File("F:\\te");String keyword = "test";File[] filesResult= fileTest.getFiles(folder, keyword);System.out.println("在此目录下一共有目录:"+foldersCount+"个");System.out.println("在此目录下一共有文件:"+filesCount+"个");System.out.println("满足条件的文件共计:"+filesResult.length+"个");}public File[] getFiles(File folder, final String keyword){//1 得到目录和满足条件的文件File[] filterFiles = folder.listFiles(new FileFilter() {@Overridepublic boolean accept(File file) {if (file.isFile()) {filesCount++;}if (file.isDirectory()) {foldersCount++;}if (file.isDirectory()|| (file.isFile() && file.getName().contains(keyword))) {return true;} else {return false;}}});//2 将1结果中的文件直接添加到集合且用目录进行迭代for (int i = 0; i < filterFiles.length; i++) {if (filterFiles[i].isFile()) {filesArrayList.add(filterFiles[i]);} if (filterFiles[i].isDirectory()) {getFiles(filterFiles[i],keyword);}}//3 返回结果File finalFiles[] = new File[filesArrayList.size()];filesArrayList.toArray(finalFiles);return finalFiles;}}