初探文件搜索器
一.
我用的笔记本是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使用。而我自己的搜索器则全然不顾这些,要多快有多快,所以在计算机空闲时使用比较明智。