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() {
			@Override
			public 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;
	}
}

Java利用FileFilter过滤文件

上一篇:C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结


下一篇:招聘优秀开发者的7个简单原则