文件搜索器_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 文件搜索器

文件搜索器

 2013/9/17 18:59:18  朱凌峰  程序员俱乐部  我要评论(0)
  • 摘要:初探文件搜索器一.我用的笔记本是win7系统的,它自带的文件搜索功能虽然方便,但速度太慢,常常搜索一个文件要等好几分钟,甚至几十分钟,相信大家也有过体验。我用java写了一个简单的FileSearcher,发现它的速度比win7自带搜索器快很多,往往几秒钟就搜完了。以图为证:二.下面简单介绍我的代码实现:核心部分是利用递归算法,不断地列出当前目录(parent)下的子文件,判断子文件类型,若是目录,则继续递归;若是真实文件,则判断文件名中是否含有所需查找的关键字
  • 标签:文件

初探文件搜索器

一.

我用的笔记本是win7系统的,它自带的文件搜索功能虽然方便,但速度太慢,

常常搜索一个文件要等好几分钟,甚至几十分钟,相信大家也有过体验。

我用java写了一个简单的FileSearcher,发现它的速度比win7自带搜索器快很多,往往几秒钟就搜完了。

以图为证:

?

二.

下面简单介绍我的代码实现:

?

核心部分是利用递归算法,不断地列出当前目录(parent)下的子文件,判断子文件类型,若是目录,则继续递归;若是真实文件,则判断文件名中是否含有所需查找的关键字

?

class="java">	/**
	 * 搜索文件方法
	 * 
	 * @param parent
	 * @param targetFileName
	 */
	public void search(File parent, String targetFileName) {
		if(stopFlag==false){
		if (parent.isFile()) {
			return;
		}
		if (parent.exists()) {
			File[] lf = parent.listFiles();
			if (lf == null) {
				return;
			}
			for (File f : lf) {
				if (f.isFile()) {
					countAll++;
					if (f.getName().indexOf(targetFileName) >= 0) {
						countFinded++;
//						jta_result.append("finded:" + f.getAbsolutePath()+"\r\n");
						jta_result.append(f.getAbsolutePath()+"\r\n");
					}
				}
				if (f.isDirectory()) {
					search(f, targetFileName);
				}
			}
		}
		}
	}

?

三。

为了查找时的方便,我还是用了JFileChooser这个组件,用户通过它来选择查找的初始目录,然后程序在该目录下查找所需文件。

效果如图:

?

?代码实现如下:

?

	/**
	 * show the filechooser frame
	 */
	public File showFileChooser(){
		JFileChooser fc = new JFileChooser("d:");  
        //是否可多选   
        fc.setMultiSelectionEnabled(true);  
        //选择模式,可选择文件和文件夹   
        fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);  
//      fc.setFileSelectionMode(JFileChooser.FILES_ONLY);   
//      fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);   
        //设置是否显示隐藏文件   
        fc.setFileHidingEnabled(true);  
        fc.setAcceptAllFileFilterUsed(false);  
        //设置文件筛选器   
//        fc.setFileFilter(new MyFilter("java"));  
//        fc.setFileFilter(new MyFilter("zip"));  
//          fc.setFileFilter(filter)
//          FileFilter
        int returnValue = fc.showOpenDialog(new JFrame("open")); 
//        int r=fc.showSaveDialog(new JFrame("save"));
        if (returnValue == JFileChooser.APPROVE_OPTION)  
        {  
            File file=fc.getSelectedFile()   ;
            System.out.println(file);
            return file;
//            fc.getSelectedFiles()  ; 
        }  
        else {
        	return null;
        }
	}
?上面红色部分获取并返回了在JFileChooser中选择的文件,程序调用出则利用它来查找文件。

?

? 四。 最后再说说我的发现。打开windows任务管理器查看我的FileSearcher程序进程,发现其峰值cpu占用达到了80,再观察win7自带搜索器,cpu占用则比较少,常常在个位数。 由此可知,win7是为了保证计算机各个程序都能正常运行,所以限制搜索程序的cpu使用。而我自己的搜索器则全然不顾这些,要多快有多快,所以在计算机空闲时使用比较明智。
  • 大小: 69.2 KB
  • 大小: 83.3 KB
  • 查看图片附件
发表评论
用户名: 匿名