目录
架构如下:
主要还是看重了Java语言跨平台的特性,使此项目程序不仅可以在windows上运行,也可以在如mac,Linux等os上运行。
SQLite这种嵌入式数据库的最重要特点就是轻量化,它的数据储存高效,查询也很简单。
SQLite数据库很适合中小型数据的存储,很适合我们要完成的需求。
若想使用SQLite数据库我们也不需要进行任何安装和配置,只需要拷贝计算机中的SQLite库并创建即可。
旨在对我们的项目程序提供可视化设计,供用户使用程序。
当用户使用程序时,可以很容易理解如何进行操作,并且对查询到的信息一目了然。
在扫描文件时,我们采用多线程方式实现,更快速地进行文件扫描,提高搜索效率。
我们通过创建线程池的方式来承载扫描文件线程。
用于遍历并且捕获扫描到的文件的信息,并将最新的文件信息放到数据库中。
添加lombok依赖可以帮助我们将代码简化,通过注解方式即可完成一些我们经常需要用到的常规代码,提高我们开发时的效率
需要使用AtomicInteger来保证一些由于线程而发生++的值的原子性,避免线程不安全。
1.关于如何进行文件的扫描,如何于数据库连接,如何将扫描到的最新文件信息放到数据库中,并且将数据库中的旧信息删掉。
2.如何进行多线程的运用,在提高效率的同时保证线程安全,并且在何时关闭线程池。
3.如何进行模糊搜索
接下来我们讲一下本项目数据结构,我基本是从上一个类引出下一个类这个关系去写的。
本项目只有一个数据表,记录了文件的详细信息。
用init.sql命名
- --drop table if exists file_meta;
- create table if not exists file_meta(
- name varchar(50) not null,
- path varchar(100) not null,
- is_directory boolean not null,
- size bigint,
- last_modified timestamp not null,
- pinyin varchar(200),
- pinyin_first varchar(50)
- );
现在我们思考,若想建立出这么一张表,我们需要建立哪些类。
首先,我们需要建立一个包含整合了所有单行表信息的类,我们命名为FileMeta。
可以说,我们所有的扫描操作都要先保存到FileMeta对象中,再将此对象中的内容保存到数据库中
在这个类中,我们会使用Lombok的一些注解,以增加效率。
本接口及其子类用于FileMeta的属性填写。
文件的扫描接口,只有一个callback方法。
包含两个子类,一个可以用于网络扫描,一个用于本地扫描,我们本项目只实现本地扫描的子类。
继承接口的子类,用于具体扫描方法的实现,通过覆写callback方法,并且加上子类自我实现的添加,删除,查询数据库信息的各个方法,最后对比出最新的结果写入数据库。
根据上文,我们已经创建出了一个类来实现具体的文件扫描,而FileScanner的职责,便是利用上面类的方法,并且通过建立线程池,利用多线程的方式进行文件及子文件夹进行扫描。是此项目的重中之重。为避免线程安全问题,我们会使用原子类AtomicInteger
此时通过FileScanner,我们已经得到了数据库中的最新信息,这时候再根据文件的路径以及可能存在的用户搜索框中模糊查询的内容对数据库进行查询,并且将List
Util更多起到一种配置的作用,例如:
如何通过文件名称得到拼音及首字母,
创建DataBase的单例,连接数据库,创建数据表
以及一些时间,文字格式上的配置,全部来自Util
谜底就在谜面上,可以认为是整个程序的扫描开关,如果说我们是通过Main方法打开文件,那么Controller类就是用来开启文件扫描的。
它最主要的方法有两个:
此方法的内核在于将文件最新信息保存到数据库中,并删除旧信息
根据选择目录以及用户在文本框中输入的模糊搜索内容寻找数据库信息,进行页面内容展示