项目第四天

1、JavaFx,GUI编程

2、文件扫描、支持并发的文件扫描

3、扫描出的文件存储 ->搜索工作

持久化存储方案——数据库(sqlite:本地文件级别的数据库、一个库就是一个文件)

演示:新建一个maven项目,在pox.xml中添加依赖:

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

然后在本地新建一个文件夹,准备把数据库放入这个文件夹,

这就是简单的使用sqlite数据库。

刚才使用的数据库的路径是自己新建的绝对路径  E:\xiangmu\3数据库

如果用户没有这个地址,如何处理?

1、放在一个肯定存在的位置——C:\Users\bit

2、使用相对路径,程序放在哪,数据库文件就放在哪

3、给出用户提示,让用户选择

本次选择第二种解决方案。

给定一个文件夹进行扫描,A是数据库中之前扫描的结果,B是本次扫描的结果,正确结果应该是B。

新建一个类,进行文件属性的整理:

然后把上面扫描到的信息放入数据库中,先在target目录下建表:

public class ScanService {
    private static final DataSource dataSource;

    static {
        SQLiteDataSource sqLiteDataSource = new SQLiteDataSource();

        try {
            String classesPath = GetClassPath.class.getProtectionDomain()
                    .getCodeSource().getLocation().getFile();
            String decode = URLDecoder.decode(classesPath, "UTF-8");
            File classesDir = new File(decode);
            String dbPath = classesDir.getParent() + "/test.db";

            sqLiteDataSource.setUrl("jdbc:sqlite://" + dbPath);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        dataSource = sqLiteDataSource;
    }

    public static void main(String[] args) throws SQLException {
        createTable();   //建表
    }


    private static void createTable() throws SQLException {
        String sql = "CREATE TABLE IF NOT EXISTS file_meta (\n" +
                "    id INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
                "    name VARCHAR(50) NOT NULL,\n" +
                "    path VARCHAR(1000) NOT NULL,\n" +
                "    is_directory BOOLEAN NOT NULL,\n" +
                "    pinyin VARCHAR(50) NOT NULL,\n" +
                "    pinyin_first VARCHAR(50) NOT NULL,\n" +
                "    size BIGINT NOT NULL,\n" +
                "    last_modified TIMESTAMP NOT NULL\n" +
                ");";

        try (Connection connection = dataSource.getConnection()) {
            try (PreparedStatement s = connection.prepareStatement(sql)) {
                s.executeUpdate();
            }
        }
    }
}

建完表之后进行文件扫描:

这是扫描出的结果,还需要知道数据库中查询出的结果。

然后求他们两个的集合:

scanResult - queryResult : INSERT到数据库中。

queryResult - scanResult : 从数据库中删除。

还有就是支持拼音搜索功能:

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

项目开始前准备工作就结束了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值