一、项目简介
基于Java语言开发的命令行文件搜索小工具。
二、项目背景
在Windows平台下进行文件搜索时,只能查询到当前目录下的文件,而且也不如Linux下的find命令好用,所以DIY开发一款命令行工具,可以实现全盘搜索文件。
三、实现意义
1.解决了Windows命令行下文件搜索的盘符限制问题,可以搜索整个文件系统的内容
2.基于Java开发的工具可以跨平台使用
3.当然也可以锻炼自己的编码能力
四、主要实现功能
五、具体实现(采用高内聚低耦合进行分层)
持久化层:
选用H2嵌入式数据库存储(采用简单工厂+单例模式),H2的优点如下:
1.速度快、开源(免费)、JDBC API(遵循API,可以操纵数据库)
2.嵌入式,server(服务器)模式,支持内存存储(把数据存到内存,不需要存到本地磁盘,(快))
3.基于浏览器的控制台应用程序(可以遍历)
4.非常轻量的纯java开发的数据库
设计数据库的表:
1.创建数据库(small_everything)
2.设计数据库的表(Thing类创建的对象的属性)
JDBC创建连接有两种方式(我采用第二种方式):
1.使用DriverManger.getConnection()
2.创建数据源(DataSource)建立连接
业务层:
实现检索、索引、文件系统监控。三个功能互不干扰,即可放在三个不同的包下,方便代码管理。
检索流程:
1.数据库的初始化工作
2.数据库的访问工作(使用DataSource数据源)
3.实现检索业务(从数据库中查询数据)
索引流程:
1.数据库的初始化工作
2.数据库的访问工作(使用DataSource数据源)
3.实现检索业务(将数据插入到数据库)
将数据插入到数据库流程:
1.首先遍历文件系统中的所有文件
2.对一些特定的文件或者目录进行排除
3.将文件对象转换为Thing对象
文件系统监控:
1.监控操作系统的文件系统中文件的变化
2.文件(目录)新增(在搜索的时候已经进行了删除操作,就不用再监控文件的删除)
两种方案可以实现文件系统的监控:
1.JDK提供文件系统监控
FileSystem WatchService(无法监听更深层次目录,只能监听一级目录)
2.Apache Commons IO开源库(我采用此方式)
FileAlterationObserve(如果发现文件变化,会发通知告诉你)
FileAlterationMoniter(用来调度,启动监听器)
FileAlterationListener(用来接收文件系统的通知)
控制层:
统一调度器流程:
1.构建索引(index功能,业务FileScan)
2.检索功能(search功能,业务FileSearch)
客户端:
1.欢迎 welcome()
2.帮助 help()
3.退出 quit()
4.索引 index()
5.检索 search()
六、项目使用技术
1.Java文件操作
2.使用嵌入式数据库
3.JDBC编程
4.Java多线程
5.Lombok库
6.文件系统监控
七、运行结果
八、项目源码
https://github.com/gx0529/Java-code/tree/master/small-everything
九、项目测试
我对项目的测试点如下: