FileFilter和FilenameFilter类性能比较
来源:互联网 发布:hashset源码 编辑:程序博客网 时间:2024/06/10 19:03
FileFilter和FilenameFilter 两个接口是在文件搜索中常用的,有什么区别?
(什么是FileFilter? 什么是FilenameFilter? )
下面通过一个测试程序来初步检验两个接口的性能。
方法:在一个目录中创建20000 个txt 文件,分别用实现了以上两个接口的类来搜索这个目录中的所有txt 文件,查看时间。
结果:FilenameFilter性能好于FileFilter。
首先是个工具类:niTimer.java
package cn.nileader.io;/** * @author nileader * @see http://www.nileader.cn */class niTimer { /* * 构造方法 */ public niTimer() { this.reSet(); } /* * 开始计时 */ public void start() { this.isRunning = true; this.startTime = System.currentTimeMillis(); } /* * 停止计时 */ public void end() { this.isRunning = false; long endTime = System.currentTimeMillis(); this.useTime = endTime - this.startTime; } /* * 初始化 使this.useTime = 0; */ public void reSet() { this.useTime = 0; this.isRunning = false; } /* * 过去所用时间 */ public long getUseTime() { return useTime; } private long startTime; private long useTime; private boolean isRunning; public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public void setUseTime(long useTime) { this.useTime = useTime; } }
分别是两个实现了 FileFilter和FilenameFilter接口的类
niFileFilter.java
package cn.nileader.io;import java.io.File;import java.io.FileFilter;/** * 继承FileFilter接口的文件检索类 * @author nileader * @see http://www.nileader.cn */class niFileFilter implements FileFilter{public String dat; //定义的扩展名public String getDat() {return dat;}public void setDat(String dat) {this.dat = dat;}/** * 构造方法 */public niFileFilter(String dat){this.setDat(dat);}/** * 过滤的方法 * @param file 待查询的文件对象 * @return 是否符合指定文件 */public boolean accept(File file) { //如果file是个目录 if(file.isDirectory()) return false;String fileName = file.getName();//对获取的文件全名进行拆分String[] arrName = fileName.split("\\.");if(arrName[1].equalsIgnoreCase( this.getDat() ) ){return true;}return false;}}
niFilenameFilter.java
package cn.nileader.io;import java.io.File;import java.io.FilenameFilter;/** * 继承FileFilter接口的文件检索类 * @author nileader * @see http://www.nileader.cn */class niFilenameFilter implements FilenameFilter{public String dat; //定义的扩展名public String getDat() {return dat;}public void setDat(String dat) {this.dat = dat;}/** * 构造方法 */public niFilenameFilter(String dat){this.setDat(dat);}/** * 过滤的方法 * @param file 待查询的文件对象 * @return 是否符合指定文件 */public boolean accept(File dir, String fileName) {//对获取的文件全名进行拆分String[] arrName = fileName.split("\\.");if(arrName[1].equalsIgnoreCase( this.getDat() ) ){return true;}return false;}}
测试程序二:
先执行 niFilenameFilter 接口实现,再执行 FileFilter 接口实现
package cn.nileader.io;import java.io.File;import java.io.FileFilter;/** * 测试类 */public class niFFTest{public static void main(String[] args) throws Exception{//// 生成大量文件//for(int i=0; i<20000; i++)//{//File file = new File("P:/Temp/java/nichao"+i+".txt");//file.createNewFile();//} //计时实例niTimer myTimer = new niTimer(); //以下是采用niFilenameFilter来搜索文件 niFilenameFilter nfnf = new niFilenameFilter("txt"); //搜索文件 File file2 = new File("P:/Temp/java/"); //计时开始 myTimer.start(); File filelist2[] = file2.listFiles(nfnf); //计时结束 myTimer.end(); System.out.println("使用niFilenameFilter接口,用时 "+myTimer.getUseTime()+"毫秒" );//以下是采用niFileFilter来搜索文件niFileFilter nff = new niFileFilter("txt");//搜索文件File file = new File("P:/Temp/java/"); //计时开始 myTimer.start(); File filelist[] = file.listFiles(nff); //计时结束 myTimer.end(); System.out.println("使用FileFilter接口,用时 "+myTimer.getUseTime()+"毫秒" ); }}
第一次:
使用niFilenameFilter接口,用时 219毫秒
使用FileFilter接口,用时 797毫秒
第二次:
使用niFilenameFilter接口,用时 235毫秒
使用FileFilter接口,用时 937毫秒
测试程序一:
先执行FileFilter 接口实现,再执行niFilenameFilter 接口实现
package cn.nileader.io;import java.io.File;import java.io.FileFilter;/** * 测试类 */public class niFFTest{public static void main(String[] args) throws Exception{//// 生成大量文件//for(int i=0; i<20000; i++)//{//File file = new File("P:/Temp/java/nichao"+i+".txt");//file.createNewFile();//} //计时实例niTimer myTimer = new niTimer(); //以下是采用niFileFilter来搜索文件niFileFilter nff = new niFileFilter("txt");//搜索文件File file = new File("P:/Temp/java/"); //计时开始 myTimer.start(); File filelist[] = file.listFiles(nff); //计时结束 myTimer.end(); System.out.println("使用FileFilter接口,用时 "+myTimer.getUseTime()+"毫秒" ); //以下是采用niFilenameFilter来搜索文件 niFilenameFilter nfnf = new niFilenameFilter("txt"); //搜索文件 File file2 = new File("P:/Temp/java/"); //计时开始 myTimer.start(); File filelist2[] = file2.listFiles(nfnf); //计时结束 myTimer.end(); System.out.println("使用niFilenameFilter接口,用时 "+myTimer.getUseTime()+"毫秒" ); }}
最终的测试结果是:
第一次:
使用FileFilter接口,用时 906毫秒
使用niFilenameFilter接口,用时 157毫秒
第二次:
使用FileFilter接口,用时 922毫秒
使用niFilenameFilter接口,用时 156毫秒
- FileFilter和FilenameFilter类性能比较
- FileFilter和FilenameFilter类性能比较(zz)
- FilenameFilter和FileFilter过滤器
- FileFilter和FilenameFilter的区别
- FilenameFilter 和 FileFilter接口学习
- File中的FileFilter和FilenameFilter接口
- java中Filefilter和Filenamefilter的区别
- java中Filefilter和Filenamefilter的区别
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
- java.io包的FileFilter和FileNameFilter的区别
- FilenameFilter与FileFilter的区别
- FileFilter和FileFilter
- Java中的文件对话窗(FileDialog,FilenameFilter,JFileChooser,FileFilter)
- listFiles(),如何实现FileFilter及其FilenameFilter接口,list()的使用
- FileFilter
- FileFilter
- 【比较器】——Comparator和Runnable、FileNameFilter接口的巧用
- JFileChooser和FileFilter的使用
- 数据结构(二) --- 基本数据类型
- -bash: mysql: command not found
- 学习设计模式----有关C#问题的理解
- MFC鼠标悬停提示
- 有关数据库增删改(通用方法)
- FileFilter和FilenameFilter类性能比较
- gravity与layout_gravity的使用场景
- 国内的云主机性能真不行啊
- C# WinForm开发系列 - DataGridView 表头合并拆分单元格
- 找出共享池中sql的绑定变量值!
- commons-io之inputstream学习
- LIBSVM学习笔记
- 【小蒙淘金】1.28金评-黄金白银行情分析及操作建议
- android 中Xml里面的id重名问题