仿everything的文件搜索工具项目详解:Part2

目录

代码架构

基本架构

开发语言:Java8

数据库:SQLite

JavaFX

多线程

文件IO流

Lombok

Atomic原子类

项目难点

主要数据结构

数据表

FileMeta

FileScannerCallBack接口及其子类

FileSave2DB

FileScanner

FileSearch

Util包

Controller

1.通过选择的文件夹扫描内容。

 2.刷新页面,展示内容


代码架构

架构如下:

基本架构

开发语言:Java8

主要还是看重了Java语言跨平台的特性,使此项目程序不仅可以在windows上运行,也可以在如mac,Linux等os上运行。

数据库:SQLite

SQLite这种嵌入式数据库的最重要特点就是轻量化,它的数据储存高效,查询也很简单。

SQLite数据库很适合中小型数据的存储,很适合我们要完成的需求。

若想使用SQLite数据库我们也不需要进行任何安装和配置,只需要拷贝计算机中的SQLite库并创建即可。

JavaFX

旨在对我们的项目程序提供可视化设计,供用户使用程序。

当用户使用程序时,可以很容易理解如何进行操作,并且对查询到的信息一目了然。

多线程

在扫描文件时,我们采用多线程方式实现,更快速地进行文件扫描,提高搜索效率。

我们通过创建线程池的方式来承载扫描文件线程。

文件IO流

用于遍历并且捕获扫描到的文件的信息,并将最新的文件信息放到数据库中。

Lombok

添加lombok依赖可以帮助我们将代码简化,通过注解方式即可完成一些我们经常需要用到的常规代码,提高我们开发时的效率

Atomic原子类

需要使用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。

可以说,我们所有的扫描操作都要先保存到FileMeta对象中,再将此对象中的内容保存到数据库中

在这个类中,我们会使用Lombok的一些注解,以增加效率。

FileScannerCallBack接口及其子类

本接口及其子类用于FileMeta的属性填写。

文件的扫描接口,只有一个callback方法。

包含两个子类,一个可以用于网络扫描,一个用于本地扫描,我们本项目只实现本地扫描的子类。

FileSave2DB

继承接口的子类,用于具体扫描方法的实现,通过覆写callback方法,并且加上子类自我实现的添加,删除,查询数据库信息的各个方法,最后对比出最新的结果写入数据库。

FileScanner

根据上文,我们已经创建出了一个类来实现具体的文件扫描,而FileScanner的职责,便是利用上面类的方法,并且通过建立线程池,利用多线程的方式进行文件及子文件夹进行扫描。是此项目的重中之重。为避免线程安全问题,我们会使用原子类AtomicInteger

FileSearch

此时通过FileScanner,我们已经得到了数据库中的最新信息,这时候再根据文件的路径以及可能存在的用户搜索框中模糊查询的内容对数据库进行查询,并且将List<FileMeta>内容返回,用于界面展示。

Util包

Util更多起到一种配置的作用,例如:

如何通过文件名称得到拼音及首字母,

创建DataBase的单例,连接数据库,创建数据表

以及一些时间,文字格式上的配置,全部来自Util

Controller

谜底就在谜面上,可以认为是整个程序的扫描开关,如果说我们是通过Main方法打开文件,那么Controller类就是用来开启文件扫描的。

它最主要的方法有两个:

1.通过选择的文件夹扫描内容。

此方法的内核在于将文件最新信息保存到数据库中,并删除旧信息 

 2.刷新页面,展示内容

根据选择目录以及用户在文本框中输入的模糊搜索内容寻找数据库信息,进行页面内容展示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值