search-everything项目

该项目是一个仿照Everything的文件搜索应用,使用Java8、JavaFX、多线程和SQLite数据库技术,支持在多平台上运行。它能快速扫描文件夹,多线程提升效率,使用SQLite作为小巧轻便的数据库。主要功能包括搜索文件名、路径、大小、修改时间和是否为文件夹,支持模糊搜索。项目依赖包括汉字转拼音、SQLite数据库、Lombok等。在搜索时,首次选择路径会将数据保存到内存和数据库,之后的搜索直接在数据库中进行。
摘要由CSDN通过智能技术生成

项目简介

仿照Everything的文件搜索软件,但是Everything只支持windows系统,此项目由java实现,支持多平台的使用

项目的技术:

Java8+JavaFX+多线程+IO流+SQLite数据库
扫描文件夹时,多线程扫描,效率大大提升
SQLite嵌入式数据库,小型数据库,占用资源低,小巧轻便

基本功能

  1. 选择一个文件夹,多线程搜索该文件夹下的子文件,展示文件的名称,路径,大小,修改时间以及是否为文件夹
  2. 选择路径后,支持搜索该路径下的相关文件内容,支持模糊搜索(首字母,全拼,文件名)

导入的依赖和插件

1.将汉字转换成对应的拼音字符串

		<dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>

2.SQLite数据库包

<dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.36.0.3</version>
        </dependency>

3.lombok开发包:
用注解代替get,set等方法,避免代码冗余
@Date:注入属性的getter和setter方法
@EqualsAndHashCode:注入equals放啊和hashcode法
@AllArgsConstructor:注入全部参数的有参构造
@ToString:注入toString方法

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>

4.可执行jar包:指定项目从哪一个类进入

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <!-- 指定入口类 -->
                            <mainClass>Main</mainClass>
                            <!-- 在jar的MF文件中生成classpath属性 -->
                            <addClasspath>true</addClasspath>
                            <!-- classpath前缀,即依赖jar包的路径 -->
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

5.在将代码打包的同时将导入的包也一并打包进去

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 指定依赖包的输出路径,需与上方的classpathPrefix保持一致 -->
                            <outputDirectory>${
   project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

app.fxml文件:

前端界面展示的样子,配合control类使用,由前端开发人员完成
窗口界面

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>

<GridPane fx:id="rootPane" alignment="center" hgap="10" vgap="10" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="app.Controller">
    <children>

        <Button onMouseClicked="#choose" prefWidth="90" text="选择目录" GridPane.columnIndex="0" GridPane.rowIndex="0" />
        <Label fx:id="srcDirectory">
            <GridPane.margin>
                <Insets left="100.0" />
            </GridPane.margin>
        </Label>
        <TextField fx:id="searchField" prefWidth="900" GridPane.columnIndex="0" GridPane.rowIndex="1" />

        <TableView fx:id="fileTable" prefHeight="1000" prefWidth="1300" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.rowIndex="2">
            <columns>
                <TableColumn fx:id="nameColumn" prefWidth="220" text="名称">
                    <cellValueFactory>
                        <PropertyValueFactory property="name" />
                    </cellValueFactory>
                </TableColumn>
                <TableColumn prefWidth="400" text="路径">
                    <cellValueFactory>
                        <PropertyValueFactory property="path" />
                    </cellValueFactory>
                </TableColumn>
                <TableColumn fx:id="isDirectory" prefWidth="90" text="文件类型">
                    <cellValueFactory>
                        <PropertyValueFactory property="isDirectoryText" />
                    </cellValueFactory>
                </TableColumn>
                <TableColumn fx:id="sizeColumn" prefWidth="90" text="大小(B)">
                    <cellValueFactory>
                        <PropertyValueFactory property="sizeText" />
                    </cellValueFactory>
                </TableColumn>
                <TableColumn fx:id="lastModifiedColumn" prefWidth="160" text="修改时间">
                    <cellValueFactory>
                        <PropertyValueFactory property="lastModifiedText" />
                    </cellValueFactory>
                </TableColumn>
            </columns>
        </TableView>
    </children>
</GridPane>

类概述

在这里插入图片描述
Contoller:配合界面文件app.fxml使用,界面中的数据交给这个类来执行,特是通过这个类写回界面
FileMeta:存储每个文件的相关信息,每一个实例化对象都对应数据库中的一条数据
FileScannerCallback:回调接口
SaveToDB:回调接口的具体实现类,将扫描到的信息存储到数据库中
FileScanner:根据选择的文件夹扫描文件
FileSearch:根据搜索框中输入的数据搜索数据库
DBInit:读取init.sql,进行数据库的初始化操作
DBUtil:提供数据库的数据源,创建数据库的连接,关闭连接等操作
PinyinUtil:配置拼音格式,将汉字转换成字符串
Util:通用工具类
app.fxml:界面文件
init.sql:初始化数据库的语句资源

数据库的初始化文件

即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)
);

前五项是需要展示在界面上的内容,而拼音首字母和拼音全拼只存储在数据库中供搜索使用,并不显示在界面上
在这里插入图片描述

通用工具类

提供其它类中会用到的通用工具

public class Util {
   
    //数据库的日期格式
    public static final String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
    //是否为文件夹以汉字显示而非ture,false或1,0
    public static String parseDirectory(Boolean directory) {
   
        return directory?"文件夹":"文件";
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值