java将大量sql文件分成多个以关键字开头的单个文件

maven依赖:

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.15</version>
        </dependency>

主要分成多个文件:

普通索引

插入数据

建表语句

唯一性索引

其他需求update等 自行添加

修改输入目录,sql 所在的目录:INPUT_DEST

修改输出目录,sql 输出的目录:OUTPUT_DEST

package com.xiaoyun;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.util.StrUtil;

import java.io.File;
import java.util.List;

public class SqlList {
    private final static String INPUT_DEST = "F:\\sql\\";
    private final static String OUTPUT_DEST = "F:\\sqlOutput\\";
    /**
     * 开头前缀
     */
    private final static String startCreateIndex = "CREATE INDEX";
    private final static String startInsert = "INSERT INTO";
    private final static String startCreateTable = "CREATE TABLE";
    private final static String startUniqueIndex = "CREATE UNIQUE INDEX";

    //普通索引
    private final static File createIndex = new File(OUTPUT_DEST + "index.sql");
    //插入数据
    private final static File insert = new File(OUTPUT_DEST + "insert.sql");
    //建表语句
    private final static File createTable = new File(OUTPUT_DEST + "table.sql");
    //唯一性索引
    private final static File uniqueIndex = new File(OUTPUT_DEST + "uniqueIndex.sql");
    //TODO 未归类,建议查看自定义 截取前缀
    private final static File not = new File(OUTPUT_DEST + "not.sql");

    public static void main(String[] args) {
        List<File> files = FileUtil.loopFiles(INPUT_DEST);
        files.stream().parallel().forEach(fileItem -> {
            if (fileItem.toString().endsWith(".sql")) {
                try {
                    FileReader fileReader = new FileReader(fileItem);
                    String str = fileReader.readString();
                    String removeStr = StrUtil.removeAllLineBreaks(str);
                    String[] split = removeStr.split(";");
                    for (int i = 0; i < split.length; i++) {
                        String s = split[i];
                        //建表语句
                        if (startWithStr(createTable, startCreateTable, s)) continue;
                        //插入语句
                        if (startWithStr(insert, startInsert, s)) continue;
                        //索引语句
                        if (startWithStr(createIndex, startCreateIndex, s)) continue;
                        //唯一索引语句
                        if (startWithStr(uniqueIndex, startUniqueIndex, s)) continue;
                        //TODO 未归类语句
                        FileWriter fileWriter = new FileWriter(not);
                        fileWriter.append(s + ";");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

    private static boolean startWithStr(File createTable, String startCreateTable, String s) {
        if (s.startsWith(startCreateTable)) {
            FileWriter fileWriter = new FileWriter(createTable);
            fileWriter.append(s + ";");
            return true;
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值