您的位置:首页 > 编程语言 > Java开发

使用java进行本地文件全盘搜索

2017-11-22 17:23 288 查看
由于本地文件越来越多, 有时需要找一个文件时, 总不能第一时间记得它的路径. 

从网上下了一个软件: Everything, 是依据NTFS文件系统的文件索引来完成搜索的, 对于FAT32并不适用.

自己用java写了一个小程序, 用于全盘扫描(分为按条件(大小), 按名称)来进行全盘文件的搜索.

____________小程序下载

1. 初始搜索类(二种方式)

LocalFileSearcher searcher = new LocalFileSearcher(); //默认全盘, 100线程池大小

SearchConfig searchConfig = new SearchConfig();
searchConfig.setStartFolder(null);//初始搜索路径
searchConfig.setThreadNum(50);//线程池大小
LocalFileSearcher searcher = new LocalFileSearcher(searchConfig);


也可配置线程池大小(默认100), 初始搜索路径(默认全盘搜索)

2. 开始搜索文件(三种方式)

//默认关键字来搜索
searcher.doSearch("test");

//关键字搜索 搜索配置
KeyWordFilterConfig filterConfig = new KeyWordFilterConfig();
filterConfig.setMatchStart(false);//匹配开始段
filterConfig.setMatchEnd(true);//匹配结束段
filterConfig.setCaseSensitive(false);//大小写不敏感
searcher.doSearch("TEST", filterConfig);

//条件搜索
ConditionFilterConfig filterConfig = new ConditionFilterConfig();
filterConfig.setMinFileSize(500 * 1024 * 1024L);//文件最小为500M
searcher.doSearch(filterConfig);

3. 搜索过程解析

由搜索类来创建的线程池, 来接受文件夹的搜索线程. 
由初始设置的搜索文件夹(默认为各盘符)来创建最初线程, 搜索文件夹下各文件及文件夹. 
1. 判断下一层的文件及文件夹, 如果符合搜索条件, 成功!
2.下一层每个文件夹再生成一个线程, 提交到搜索类线程池.
每次一个线程结束, 来判断线程池中是否只有一个活动的线程, 如果是, 搜索完成, 结束程序.



4. 效率

以搜索包含 "test" 字符串的文件及文件夹为例.  (因为是全盘搜索, 关键字不影响效率, 条件搜索稍慢些. 文件过多时, 可以试下调整线程池大小)

Search costs(耗时)  
: 3372(ms)

File searched(搜索文件总数) : 151252

Folder searched(搜索文件夹总数): 30200

Success match(匹配成功数): 382

小程序比较简单, 说不定啥时候能有点用.


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: