有时候在Windows命令行下需要查询一些工具,但Windows命令行无法进行全局搜索,只能在当前文件下搜索。并且,for命令也需要写脚本进行搜索,很不方便。所以,我仿照Everthing桌面工具,自己DIY了一款基于Java语言的命令行工具,用来实现Windows命令行中的文件搜索。
1.解决了Windows下搜索的盘符限制,实现在整个文件系统中的搜索。
2.可以跨平台使用(Windows、Linux)。
3.当然了,还锻炼了自己的编码能力~
我主要实现了index索引功能和search检索功能,如下:
1.检索search
(1)文件名模糊检索:如:search java 检索文件名包含java的文件
(2)文件名+类型:如:search java doc 检索文件名包含java的文档类型文件
文件类型:img(图片类)、doc(文档类)、bin(二进制文件)、archive(归档类文件)、other(其他类型)
(3)清理删除文件:检索时清理掉已经在本地删除的文件
2.索引index
(1)默认索引
(2)用户自定义索引:用户自定义索引目录和排除索引的目录
(3)文件系统监听:当本地文件新增或删除时,数据库会有相应的修改
开闭原则(对扩展开放,对修改关闭),高内聚低耦合
Everthing的分层结构图基本模型类model:
(1)检索类Condition:存放检索的条件
(2)文件类型:img、doc、bin、archive、other
(3)Thing类:索引File之后的信息(文件名、文件类型、文件路径、文件路径深度),存入数据库
1.持久化层:
(1)设计数据库表
(2)数据库编程JDBC - 工厂设计模式(单例工厂)
2.业务层
(1)检索
(2)索引
因为检索和索引类似,所以讲其中对数据库的操作提出来,放到dao中实现。
(3)文件系统监控
采用开源库中提供的Apache Commons(遍历文件系统)- Filemonitor 文件监控
FileAlterationListener:用来接收文件系统的通知,需要自己实现的接口
FileAlterationObserver:发现文件变化,用来通知,依赖listener对象
FileAlterationMonitor:用来调度:启动、停止、给监听器添加通知者,依赖observer对象
3.控制层
统一调度器
4.客户端
命令行客户端
GitHub地址:https://github.com/Ahiahiahia/project/tree/master/my-everthing
Java多线程
Java文件操作
Database(h2嵌入式数据库)
JDBC
Lombok库(配置jar包)
Apache Commons IO(文件系统监听)
Windows、maven、IDEA
1.命令行
2.help帮助命令
3.index索引
search检索
4.文件监控
存在缺陷:
1.检索的结果数量限制,排序策略,应该给用户提供可配置的机会
2.索引的目录和文件以及排除的目录的文件,应该给用户提供可配置的机会
3.索引之后,文件被删除,但仍然可以被检索
解决办法:
1.针对1,2两点,增加一个参数处理的方法:通过执行程序的时候传入参数,使配置信息可变
2.针对3,增加一个清理删除文件的工作:检索时判断文件是否存在,不存在则删除
1.测试点整理
2.划分等价类
1)在命令行输入quit:成功退出工具,测试成功。
2)在命令行输入help:成功显示命令列表,测试成功。
3)在命令行输入index:成功建立索引,测试成功。
4)在命令行输入search java:成功检索到文件名包含java的文件,测试成功。
5)在命令行输入search java doc:成功检索到文件名包含java的文档类型文件,测试成功。
6)在命令行输入search java img:成功检索到文件名包含java的图片类型文件,测试成功。
7)在命令行输入search java bin:成功检索到文件名包含java的二进制类型文件,测试成功。
8)在命令行输入search java archive:成功检索到文件名包含java的归档类型文件,测试成功。
9)在命令行输入search java other:成功检索到文件名包含java的不是以上几类的文件,测试成功。
1)检索内容不存在:没有任何输出,测试成功。
2)检索exclude里的文件:没有任何输出,测试成功。
3.边界值分析法
1)默认检索文件输出数量上限:30个
2)默认检索文件输出下限:1个
4.容错性测试
1)输入错误命令:没有任何输出,测试成功。
2)输入错误命令格式:没有任何输出,测试成功。
3)在index之前输入search:没有任何输出,测试成功。(需改正)
4)数据库连接失败:报错,测试成功。
5.兼容性测试
该项目不能再没有安装jre的环境下运行。
可视化界面
历史检索内容