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

来源:互联网 发布:python 循环读取文件 编辑:程序博客网 时间:2024/05/20 09:24

由于本地文件越来越多, 有时需要找一个文件时, 总不能第一时间记得它的路径. 

从网上下了一个软件: 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

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

 
原创粉丝点击