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


    项目:

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

    原因:

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

    使用的环境和工具:

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

    🐟 选择环境语言:Java8 + JavaFX 

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

    🐟 插件:lombok

    实现功能:

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

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

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

    分隔符🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀分隔符

    分隔符🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀分隔符

    准备阶段:

                    💧 依赖添加

                    💧 数据库创建和连接

                    💧 前端页面设计

     

    第一天

    💧 依赖添加

    🙋 🙋 问题一:🙋 🙋

    文件名有可能是中文的,所以想要实现文件名搜索,需要把汉字字符转换成字母,但是汉字是存在多音字的,所以需要一个工具类,帮我们把中文字符转换为字母字符串的形式,这样就可以支持模糊查找。

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

    1. <dependency>
    2. <groupId>com.belerwebgroupId>
    3. <artifactId>pinyin4jartifactId>
    4. <version>2.5.1version>
    5. dependency>

    工具类的代码设计:

    1. package util;
    2. import net.sourceforge.pinyin4j.PinyinHelper;
    3. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
    4. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    5. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
    6. /**
    7. * @Author qiqichongya
    8. * @Date 2022/8/26 18:28
    9. * @PackageName:util
    10. * @ClassName: PinyinUtil
    11. * @Description: 拼音工具类
    12. * 将及汉语拼音的字符映射到字母字符串中
    13. */
    14. public class PinyinUtil {
    15. // 定义汉语拼的配置:全局变量,必须时全局唯一的且在定义时就要初始化
    16. private static final HanyuPinyinOutputFormat FORMAT;
    17. static {
    18. // 当 PinyinUtil类加载时执行静态代码块,除了可以产生对象外,还可以进行一些配置相关的工作
    19. FORMAT = new HanyuPinyinOutputFormat();
    20. // 设置转换之后的英文字母都是英文小写字母
    21. FORMAT.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    22. }
    23. /**
    24. * 传入任意的文件名称,就能将该文件名称转为字母字符串全拼和首字母小写字符串
    25. * 若文件名是由中文和英文或数字组成,只需要转换中文即可。
    26. * e.g. 七七chongya666 --> qiqichongya666 / qqchongya666
    27. *
    28. * @param fileName
    29. * @return
    30. */
    31. public static String[] getPinyinByFileName(String fileName) {
    32. // 第一个字符串用来存放文件名全拼
    33. // 第二个字符串用来存放首字母
    34. String[] ret = new String[2];
    35. // 全拼
    36. StringBuilder allNameSpells = new StringBuilder();
    37. // 首字母
    38. StringBuilder firstCaseSpells = new StringBuilder();
    39. for (char c : fileName.toCharArray()) {
    40. try {
    41. String[] pinYins = PinyinHelper.toHanyuPinyinStringArray(c, FORMAT);
    42. if (pinYins == null || pinYins.length == 0) {
    43. // 说明碰到非中文的字符,保留
    44. allNameSpells.append(c);
    45. firstCaseSpells.append(c);
    46. } else {
    47. // 碰到了中文字符
    48. allNameSpells.append(pinYins[0]);
    49. firstCaseSpells.append(pinYins[0].charAt(0));
    50. }
    51. } catch (BadHanyuPinyinOutputFormatCombination e) {
    52. allNameSpells.append(c);
    53. firstCaseSpells.append(c);
    54. e.printStackTrace();
    55. }
    56. }
    57. ret[0] = allNameSpells.toString();
    58. ret[1] = firstCaseSpells.toString();
    59. return ret;
    60. }
    61. }

    🙋 🙋 问题二:🙋 🙋

    怎末导入SQLite数据库,以及连接操作?三步走战略:创建 + 连接 + 执行 +(关闭)

    首先在maven中导入SQLite依赖:

    1. <dependency>
    2. <groupId>org.xerialgroupId>
    3. <artifactId>sqlite-jdbcartifactId>
    4. <version>3.36.0.3version>
    5. 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那样由定义好的日期格式,所以这里需要手动定义一下日期格式。

    1. package util;
    2. import org.sqlite.SQLiteConfig;
    3. import org.sqlite.SQLiteDataSource;
    4. import javax.sql.DataSource;
    5. import java.io.File;
    6. import java.sql.*;
    7. /**
    8. * @Author qiqichongya
    9. * @Date 2022/7/17 15:44
    10. * @PackageName:util
    11. * @ClassName: DataBaseUtil
    12. * 
  • 相关阅读:
    想要精通算法和SQL的成长之路 - 存在重复元素
    nacos微服务调用
    【C语言数据结构】栈-顺序存储(顺序栈)
    ts重点学习108-枚举类型知识点补充
    C#: 解释器模式(附完整源码)
    鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)
    数据交易怎样实现
    利用Pinpoint搭建全链路监控系统
    C++程序员的成长路径
    关于Vue2的生命周期会问到哪些面试题?
  • 原文地址:https://blog.csdn.net/weixin_53999801/article/details/126547509