阶段性检测实战项目—-文件搜索引擎

  • Post author:
  • Post category:其他


项目:

仿照 everthing 设计文件搜索引擎,相对于 everthing 支持跨平台的使用,这是因为Java是跨平台的。

原因:

功能简单,主要是阶段性验收学习成果,以及练习多线程编程

使用的环境和工具:

🐟 选用数据库:SQLite  (主要是小(几MB),轻量化,嵌入式的数据库,文件搜索系统在实现过程中只需要调用一张表)

🐟 选择环境语言:Java8 + JavaFX

🐟 项目管理工具:maven,方便进行第三方 jar 包的导入和管理,方便对当前项目的整个生命周期的掌握。

🐟 插件:lombok


实现功能:

🐳 选择文件夹多线程扫描该文件夹下的子文件,展示文件的名称、路径、大小和修改时间。

🐳 选择路径后,支持搜索相关文件内容,支持文件部分名、全拼或者是首字字母,支持模糊查询。

🐳 文件夹扫描完毕之后,显示搜索的所有文件以及文件夹个数,以及查询时间



分隔符


🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀


分隔符



分隔符


🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀


分隔符



准备阶段:






💧


依赖添加





💧


数据库创建和连接





💧


前端页面设计









第一天

💧


依赖添加


🙋 🙋 问题一:🙋 🙋

文件名有可能是中文的,所以想要实现文件名搜索,需要把汉字字符转换成字母,但是汉字是存在


多音字


的,所以需要一个工具类,帮我们把中文字符转换为字母字符串的形式,这样就可以支持模糊查找。



e.g.  七七冲鸭  ➡️ qiqichongya  / qqcy

        <!--汉语言拼音处理工具-->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>


工具类的代码设计:

package util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;


/**
 * @Author qiqichongya
 * @Date 2022/8/26 18:28
 * @PackageName:util
 * @ClassName: PinyinUtil
 * @Description: 拼音工具类
 * 将及汉语拼音的字符映射到字母字符串中
 */
public class PinyinUtil {
    // 定义汉语拼的配置:全局变量,必须时全局唯一的且在定义时就要初始化
    private static final HanyuPinyinOutputFormat FORMAT;

    static {
        // 当 PinyinUtil类加载时执行静态代码块,除了可以产生对象外,还可以进行一些配置相关的工作
        FORMAT = new HanyuPinyinOutputFormat();
        // 设置转换之后的英文字母都是英文小写字母
        FORMAT.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    }

    /**
     * 传入任意的文件名称,就能将该文件名称转为字母字符串全拼和首字母小写字符串
     * 若文件名是由中文和英文或数字组成,只需要转换中文即可。
     * e.g. 七七chongya666  -->  qiqichongya666  / qqchongya666
     *
     * @param fileName
     * @return
     */
    public static String[] getPinyinByFileName(String fileName) {
        // 第一个字符串用来存放文件名全拼
        // 第二个字符串用来存放首字母
        String[] ret = new String[2];
        // 全拼
        StringBuilder allNameSpells = new StringBuilder();
        // 首字母
        StringBuilder firstCaseSpells = new StringBuilder();

        for (char c : fileName.toCharArray()) {
            try {
                String[] pinYins = PinyinHelper.toHanyuPinyinStringArray(c, FORMAT);
                if (pinYins == null || pinYins.length == 0) {
                    // 说明碰到非中文的字符,保留
                    allNameSpells.append(c);
                    firstCaseSpells.append(c);
                } else {
                    // 碰到了中文字符
                    allNameSpells.append(pinYins[0]);
                    firstCaseSpells.append(pinYins[0].charAt(0));
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                allNameSpells.append(c);
                firstCaseSpells.append(c);
                e.printStackTrace();
            }
        }
        ret[0] = allNameSpells.toString();
        ret[1] = firstCaseSpells.toString();
        return ret;
    }
}

🙋 🙋 问题二:🙋 🙋

怎末导入SQLite数据库,以及连接操作?三步走战略:


创建 + 连接 + 执行 +(关闭)


首先在maven中导入SQLite依赖:

        <!-- SQLite数据库-->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.36.0.3</version>
        </dependency>


创建SQLite数据源:

创建数据库连接

A、拿到SQLite数据源

a、配置数据库的欢号窟码、曰期格式等

b、配置本和上数据库的路经和uKL

/** 对于SQLite来说,没有服务端和客户端,因此只需指定SQLite数据的地址就行了 **/

B、拿到数据库连接(从数据源拿到数据库连接)

C、执行 Statement 的查询或更新方法。

executeuery() : resultset对象,存储诸返回信息

executeupdata ():int 执行更新后的修改的行数

D、关闭连接释放资源 (statement 或 preparedstatement)



需要注意的点:

1. 因为配置数据源的URL是SQLite子类中独有的方法,所以要向下转型

2. 由于SQLite不像MySql那样由定义好的日期格式,所以这里需要手动定义一下日期格式。

package util;

import org.sqlite.SQLiteConfig;
import org.sqlite.SQLiteDataSource;

import javax.sql.DataSource;
import java.io.File;
import java.sql.*;

/**
 * @Author qiqichongya
 * @Date 2022/7/17 15:44
 * @PackageName:util
 * @ClassName: DataBaseUtil
 * 



版权声明:本文为weixin_53999801原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。