文章目录
1.项目简介
对于电脑的初学者往往不会管理文件,文件的存储总是很乱,保存一个文件也许转身就不知道在哪里了,而Windows提供给我们的搜索框也只能搜索指令盘符下的文件,不可跨盘符。所以基于这种情况,我实现了一个文件搜索的小项目
2.项目意义
- 解决Windows命令行下文件搜索问题(Windows下的文件搜索有盘符限制)
- 可以跨平台使用,如Windows、Linux系统
3.项目功能
- 用户可配置 用户可以自己配置搜索目录、输出顺序
- 文件名模糊查询 项目中使用的是前后模糊,即你输入"简历"输出包含简历字样的所有文件地址
- 指定文件类型查询 支持文档类DOC 图片类IMG等,当搜索时若输入文件类型,只输出相应类型的文件
- 文件监听 当本地文件新增或者删除,数据库会随着一起更改
4.项目使用技术
- JavaSE知识(Stream流、文件相关操作、多线程)
- 数据库连接池Database(嵌入式数据库H2)
- JDBC编程(用于数据库与Java语言的交流)
- 文件系统监听(Apache Commons IO)
- Lombok库(IDEA安装Lombok插件)
5.1 为什么用H2数据库?
-
开源的Java语言编写的嵌入式数据库
-
轻量级(内存小)
-
将数据直接存在内存中,不需要存到磁盘,只需要提供URL接口,不需要账号和密码
-
起初选择的是MySQL数据库,但是将文件加入数据库需要16.7~19.45分钟,特别慢
选择H2有数据,有索引时需要3.5分钟,无索引时需要2.3分钟,大大降低了时间
5.2 文件监听
Java程序运行时无法对操作系统文件变化做出直接响应,但是有2种方式可以监听文件
方法1: 利用FileSystem提供文件系统的接口,WatchService接口监听文件系统变化,但是这个方法只能监听一级目录
方法2: 引入Apache Commons IO开源库
FileAlterationMonitor作为监听器,将所有要监听的目录也就是不包含排除目录的所有目录加到观察器FileAlterationObserver中,并且由monitor去启动文件监听,启动后observer会去监听所有的文件,如果文件有变化,则通知FileAlteration去处理相应的改变。
6.项目使用
6.1 参数配置
java -jar java_everything-1.0.0.jar args
- –excludePath=E:\ ,设置排除路径。默认为C:\Windows, C:\Program Files, C:\Users, C:\Program Files (x86)
- –includePath=E:\ ,设置包含路径。默认为C:, D:, E:,
- –depthAsc=true/false:检索文件排序策略,默认为按照文件深度升序
6.2 帮助手册
帮助手册
退出: quit
索引:index
查找:search [<file_type> | doc | bin | archive | lan | other ]
6.3 运行截图
部分截图
7.项目概况
这个项目主要是为了查找本地文件的位置
我选择将本地文件遍历存入H2数据库,选择H2数据库是因为这是一款Java实现的数据库,可作为jar包加入到项目中,但是文件信息有很多:比如说文件名、路径、创建时间、修改时间、大小,我们想查找文件我们当然没有必要把时间、大小这些信息存进去,我只存了文件名称、文件类型、文件路径以及文件的深度,在遍历文件方面选择了多线程去遍历、有几个盘符就创建几个线程去遍历,互不影响,遍历完成之后存入数据库中,如果在查找的时候该文件已经不存在了,就不输出并在数据库中删掉。这个项目还有一个文件监听的功能,文件监听选择的是Apache的Commons IO,每100毫秒监听一次,如果系统文件增加,收到系统通知后加入数据库。
FileAlterationListener 接收系统通知
FileAlterationObserver 如果系统文件发生变化,将变化告诉Listener
FileAlterationMonitor 启动监听器、停止监听器
8. 项目测试
9.项目亮点
文件监听
查询时监听 后台线程
10.项目源代码
https://github.com/123zhaomiao/mini_everything_plus