目录

一、写在前面

二、意义

三、功能分析

四、功能模块

五、实现

六、源码

七、涉及技术

八、开发环境

九、功能效果

十、发现与修改缺陷(已解决)

十一、扩展思路


一、写在前面

有时候在Windows命令行下需要查询一些工具,但Windows命令行无法进行全局搜索,只能在当前文件下搜索。并且,for命令也需要写脚本进行搜索,很不方便。所以,我仿照Everthing桌面工具,自己DIY了一款基于Java语言的命令行工具,用来实现Windows命令行中的文件搜索。

二、意义

1.解决了Windows下搜索的盘符限制,实现在整个文件系统中的搜索。

2.可以跨平台使用(Windows、Linux)。

3.当然了,还锻炼了自己的编码能力~

三、功能分析

我主要实现了index索引功能和search检索功能,如下:

Everthing的实现思路

四、功能模块

Everthing的实现思路
Everthing的功能模块图

1.检索search

(1)文件名模糊检索:如:search java 检索文件名包含java的文件

(2)文件名+类型:如:search java doc 检索文件名包含java的文档类型文件

文件类型:img(图片类)、doc(文档类)、bin(二进制文件)、archive(归档类文件)、other(其他类型)

(3)清理删除文件:检索时清理掉已经在本地删除的文件

2.索引index

(1)默认索引

(2)用户自定义索引:用户自定义索引目录和排除索引的目录

(3)文件系统监听:当本地文件新增或删除时,数据库会有相应的修改

五、实现

开闭原则(对扩展开放,对修改关闭),高内聚低耦合

Everthing的实现思路
Everthing的分层结构图

基本模型类model:

(1)检索类Condition:存放检索的条件

(2)文件类型:img、doc、bin、archive、other

(3)Thing类:索引File之后的信息(文件名、文件类型、文件路径、文件路径深度),存入数据库

 Everthing的实现思路

1.持久化层

(1)设计数据库表

  • 创建数据库(my_everthing)
  • 设计数据库表(Thing类对象的属性)

Everthing的实现思路

(2)数据库编程JDBC - 工厂设计模式(单例工厂)

  • 创建数据源(DataSource) - 依赖Druid数据库连接池
  • 执行数据库脚本

Everthing的实现思路

2.业务层

(1)检索

  • 数据库的初始化工作
  • 数据库的访问(使用DataSource)
  • 实现检索业务(查询)

Everthing的实现思路

(2)索引

  • 数据库的初始化工作
  • 数据库的访问(使用DataSource)
  • 实现索引业务(插入):遍历文件系统中的所有业务,对一些特定的文件或目录进行排除,然后将文件对象转换为Thing对象,调用数据库访问的插入操作(一次处理一个盘符)。

Everthing的实现思路Everthing的实现思路

因为检索和索引类似,所以讲其中对数据库的操作提出来,放到dao中实现。

(3)文件系统监控

  • 文件(目录)的新增、删除
  • 监控操作系统的文件系统中文件的变化

采用开源库中提供的Apache Commons(遍历文件系统)- Filemonitor 文件监控

FileAlterationListener:用来接收文件系统的通知,需要自己实现的接口

FileAlterationObserver:发现文件变化,用来通知,依赖listener对象

FileAlterationMonitor:用来调度:启动、停止、给监听器添加通知者,依赖observer对象

Everthing的实现思路

对文件的一些处理操作:Everthing的实现思路

3.控制层

统一调度器

  • 构建索引(index功能,业务FileScan)
  • 检索数据(search功能,业务FileSearch)

Everthing的实现思路

4.客户端

命令行客户端

  • 欢迎
  • 帮助
  • 退出
  • 索引
  • 检索

Everthing的实现思路

六、源码

GitHub地址:https://github.com/Ahiahiahia/project/tree/master/my-everthing

七、涉及技术

Java多线程

Java文件操作

Database(h2嵌入式数据库)

JDBC

Lombok库(配置jar包)

Apache Commons IO(文件系统监听)

八、开发环境

Windows、maven、IDEA

九、功能效果

1.命令行

Everthing的实现思路

2.help帮助命令

Everthing的实现思路

3.index索引

search检索

Everthing的实现思路

Everthing的实现思路

4.文件监控

Everthing的实现思路

十、发现与修改缺陷(已解决)

存在缺陷:

1.检索的结果数量限制,排序策略,应该给用户提供可配置的机会

2.索引的目录和文件以及排除的目录的文件,应该给用户提供可配置的机会

3.索引之后,文件被删除,但仍然可以被检索

解决办法:

1.针对1,2两点,增加一个参数处理的方法:通过执行程序的时候传入参数,使配置信息可变

2.针对3,增加一个清理删除文件的工作:检索时判断文件是否存在,不存在则删除

十一、扩展思路

可视化界面

历史检索内容

 

 

 

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2022-02-15
  • 2021-07-22
  • 2022-01-21
  • 2021-08-24
  • 2021-12-19
  • 2022-03-09
猜你喜欢
  • 2021-04-21
  • 2021-07-03
  • 2021-06-04
  • 2021-07-09
  • 2022-12-23
  • 2021-12-12
  • 2021-06-05
相关资源
相似解决方案