java编程笔记13 过滤文件
2011-03-15 13:06
232 查看
package FileOperation; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.List; /*本程序在指定的文件夹以及其子文件夹里递归的寻找包含关键字的文件 * 1,使用FileFilter接口来过滤文件,实现FileFilter里的boolean accept(File pathname) * 作为过滤规则 * 2,使用了匿名内部类,在过滤时常用匿名内部类来产生一个包含boolean accept过滤规则类的对象, * 这样显得简洁一些,当然你也可以分成两个类来写,写一个类FileFiltertest来实现接口FileFilter * 中的boolean accept方法,然后在另一个过滤的时候这样来写: * File[] subFolders = folder.listFiles(new FileFiltertest); * 3,也另一个接口FilenameFilter也可以作为过滤的接口,方法和上面的一样 * 4,注意递归文件夹的方法*/ public class SearchFile { static int countFiles = 0,countFolders = 0; public static void main(String[] args) { //默认的folder和keyword File folder = new File("C:\\windows"); String keyword = "setup"; //也可以参数传入指定的folder和keyword if(args != null && args.length == 2) { folder = new File(args[0]); keyword = args[1]; } if(!folder.exists()) { System.out.println("文件(夹)不存在: " + folder.getAbsolutePath()); return; } //调用searchFile方法返回File[]类型的result数组 File[] result = searchFile(folder,keyword); System.out.println("在 " + folder + " 以及所有子文件里查找 " + keyword); System.out.println("查找了 " + countFiles + " 个文件, " + countFolders + " 个文件夹,共找到" + result.length + " 个符合条件的文件:" ); for(int i = 0;i < result.length;i ++) { File file = result[i]; System.out.println(" " + file.getAbsolutePath()); } } //searchFile方法, public static File[] searchFile(File folder,final String keyword) { //用匿名内部类讲过滤和过滤的类的实现放在一起了 File[] subFolders = folder.listFiles(new FileFilter() //匿名内部内开始(在产生一个对象的时候定义这个类) { public boolean accept(File pathname) { if(pathname.isFile()) countFiles ++; else countFolders ++; /*这个过滤规则是将文件夹或者含关键字的文件放入File[] subFolders里。 * 可见subFolders里既有满足条件的文件,也有一些文件夹(需要进一步递归去找)*/ if(pathname.isDirectory()||(pathname.isFile() && pathname.getName().contains(keyword))) { return true; } return false; } } //匿名内部类结束 );//过滤结束,得到了一个File[] subFolders,subFolders在上面已经解释过 List resultList = new ArrayList();//用一个resultList来存放最终的结果(满足条件的文件,即进一步递归的结果) for(int i = 0;i < subFolders.length;i ++) { //如果是subFolders[i]是文件,直接放入结果集中 if(subFolders[i].isFile()) { resultList.add(subFolders[i]); } //如果subFolders[i]是文件夹,则在subFolders[i]下递归调用本方法。 else{ File[] subFolderResult = searchFile(subFolders[i],keyword); for(int j = 0;j < subFolderResult.length;j ++) { resultList.add(subFolderResult[j]); } } } File[] result = new File[resultList.size()]; resultList.toArray(result);//将list类型转化为数组类型放在result中 return result;//放回这个数组 } }
相关文章推荐
- Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈
- Java基础知识强化之网络编程笔记13:TCP之TCP协议上传图片并给出反馈
- java核心编程之文件过滤类FileFilter和FilenameFilter
- unix环境编程笔记: 第四章: 文件过滤程序
- UNIX环境编程学习笔记(13)——文件I/O之标准I/O流
- UNIX环境编程学习笔记(13)——文件I/O之标准I/O流
- java编程笔记15 文件锁定操作
- Java笔记13:统计文件中每个字符出现的次数
- Java笔记二十.深入解析I/O编程之文件访问类
- java编程笔记18 文件压缩与解压缩
- Java笔记13:统计文件中每个字符出现的次数
- java编程笔记15 文件锁定操作
- java多线程编程核心技术笔记-停止线程interrupt()方法
- JAVA并发编程学习笔记之synchronized
- Unix环境高级编程笔记 :13、守护进程
- java8--Mysql数据库与JDBC编程(java疯狂讲义3复习笔记)
- 《java 编程思想》 读书笔记 (一)
- Elyar的java笔记--Java简单文件操作
- java继承内部类问题(java编程思想笔记)
- Java IO编程 学习笔记 (其二:简易记事本)