实战项目:文件搜索软件Search_Everything

目录

项目背景

项目介绍

技术介绍

项目流程图

包与类的功能描述

项目中遇到问题与解决:

项目未优化的地方

项目效果演示

项目源码地址:Search_Everything: 仿照everything的文件搜索工具 (gitee.com)


项目背景

  在任何操作系统中,搜索工具都是必不可少的。不过随着使用,文件数量会越来越多,对于记不住文件路径的可能需要花费很长时间来查找某个文件。搜索工具可以让我们从大量文件中快速找到我们所需文件的位置,大大节省了查找时间。目前Windows使用最广泛的搜索软件是Everything,而其他操作系统下却没有类似的搜索的软件。而Java语言具有跨平台性,所以便有想法实现自己的Search_Everything文件搜索工具。

项目介绍

        目标:仿照Everything的文件搜索软件实现的本地文件搜索工具

        使用的技术:Java8 + JavaFX + 多线程 + IO流 + SQLite(嵌入式数据库)

        项目环境:IntelliJ IDEA + Maven + Windows11 

        功能介绍:

                1.选择文件夹多线程扫描该文件夹下的子文件,展示文件的名称,路径,文件类型,大小,修改时间;

                2.得到子文件之后,支持模糊搜索(拼音,文件首字母或部分文件名)查找相关文件内容;

技术介绍

                SQLite介绍:SQLite是一款轻量级的嵌入式内存数据库(嵌入在进程中,运行在内存中的数据库),使用 ANSIC 编写的,并提供了简单和易于使用的 API。 SQLite 不需要配置,这意味着不需要安装或管理。一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。

                pinyin4j库介绍:是一个将汉字转换为拼音的开源类库,支持中文字符和拼音之间的转换。核心技术为PinyinHelper和HanyuPinyinOutputFormat。使用PinyinHelper处理汉语拼音格式:方式一:toHanyuPinyinStringArray(中文汉字)方法处理汉语拼音格式,且该格式返回的是一个string字符串类型,输出为该汉字的所有读音。方式二:toHanyuPinyinStringArray(中文汉字,HanyuPinyinOutputFormat对象)方法处理汉语拼音格式,且该格式返回的也是一个string字符串类型,将该字符的所有读音以指定的格式进行输出。创建HanyuPinyinOutputFormat对象用于处理汉语拼音输出格式。1、设置汉语拼音的大小写:setCaseType()方法;2、设置字符V的显示方式:setVCharType()方法;3、设置汉语拼音的声调:setToneType()方法

项目流程图

包与类的功能描述

app 包下

Controller 类:
提供前端用户界面的实现
提供选择文件目录的功能
提供用户界面列表的刷新功能
FileMeta 类:
创建一个类用来存储扫描文件的信息

 util 包下       

DBInit类:

获取数据库初始化的 sql 语句,完成数据库的初始化工作

DBUtil 类:

提供了使用单例模式获取数据库连接池的功能

配置数据库 URL 并得到数据库连接功能

提供关闭数据库功能

PinyinUtil 类:

定义汉语拼音的配置

提供通过任意文件名称转为字母字符串全拼和首字母小写字符串功能。
Util 类:

定义日期时间格式。

定义文件类型格式。

提供文件大小单位自动转换的功能。

task包下:

 FileScanner 类:

        创建线程池,使用多个线程在进行本地文件的递归遍历,其中从根路径开始,每当遇到子文件为目录时,便创建新的线程去遍历子目录。采用接口回调机制,将扫描到的文件信息保存进 SQLite 数据库。

 FileSearch 类:

提供根据选择的文件夹路径和用户输入的内容从数据库中查找功能。

callBack包下:

FileScannerCallBack接口:

文件信息扫描的回调接口,由 FileSave2DB 类实现,简单的提供一个 callBack() 方法。

FileSave2DB 类:

文件信息保存到数据库的回调子类,提供数据库文件信息的增加、删除、查询功能。

视图1:先将当前所有文件信息保存到内存中

视图2:从数据库中查询当前路径下的所有文件信息

对比试图12;本地有数据库无,进行数据库插入操作;本地无数据库有,进行数据库删除操作


项目中遇到问题与解决:

问题:用户前一次选择目录,文件扫描任务还未完成,就再选择文件夹,会造成前一次并未停止执行后一次与前一次并发执行的bug。

解决:在用户选择文件夹之后,先判断上一个任务是否执行完毕,如果没有完成使用interrupt()方法强制终止之前的线程。在创建新的线程来扫描选择的新文件夹。

项目未优化的地方

        1、无法针对文件中的内容搜索,这里技术上还不足以支持,可以通过后续学习知识,加上此功能。

        

项目效果演示

 文件首字母查询:

 部分文件名查询:

项目源码地址:Search_Everything: 仿照everything的文件搜索工具 (gitee.com)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值