Java批量处理文本文件实现自动化

  • 项目背景:
  • 功能需求:
  • 1、剔除掉txt大小为0kb的文件。
  • 2、每个txt文件内容前要有关闭响应表约束检查语句alter table DEM_INDEPENDENT_DEMAND NOCHECK constraint all;: 末尾追加关闭相应表约束检查语句::alter table DEM_INDEPENDENT_DEMAND CHECK constraint all; \n 再加一个换行语句。
  • 3、每张表都需要额外插入一列数据;字段名为SCENARIO_ID; 值固定为 1
  • 4、将文本中所有的GO字符去除,这两个字符是大写的。
  • 5、合成一个文本文件,里面是insert 语句;
  • 约束:文件名必须是表名; 后缀名必须是.sql 这是navicat导出来的文件特性。
    • Exception in thread “main” java.lang.OutOfMemoryError: Java heap space 调整JVM中堆空间大小。
  • 分成3个文件夹,导出sql文件。 一个太大了硬件配置不够。
  • 后期拓展,增加UI 。

使用教程:(https://www.bilibili.com/video/BV1Jg411B71C/?spm_id_from=333.999.0.0&vd_source=1032c64cfa6eefd95f003aabc4c9a3bd)

package com.oat.hap;
import java.io.*;
import java.util.*;

/**
 * @author: liYuan
 * @Title: Test
 * @ProjectName: SCPS_java
 * @Description:
 * @date: 2022/9/28 14:31
 */
class Test {
    public static void main(String[] args) {

        try {
            String txt = getTxt("D:\\data\\sql");
//            System.out.println(txt);
            writeFile(txt,"D:\\data\\sql\\test01.sql");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void writeFile(String content,String fileName) {
        FileWriter writer = null;
        try {
            //true表示不覆盖原来的内容,而是加到文件的后面,如果要覆盖,这个参数也可以省略
            writer = new FileWriter(fileName, false);
            writer.write(content);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            System.out.println("写入文件发生了异常");
            e.printStackTrace();
        }
    }
    // 读取单个txt内容
    public static String txt2String(File file) {
        StringBuilder result = new StringBuilder();
        String tableName = file.getName().replaceAll(".sql","");
        result.append("alter table "+tableName+"  NOCHECK constraint all;");
        try {
            // 构造一个BufferedReader类来读取文件
            BufferedReader br = new BufferedReader(new FileReader(file));
            String lineContent = null;
            // 使用readLine方法,一次读一行
            while ((lineContent = br.readLine()) != null) {
                lineContent = lineContent.replaceAll("GO", "");
                lineContent = lineContent.replaceAll(tableName+"]\\(",tableName+"]([SCENARIO_ID], ").replaceAll("\\) VALUES \\(","\\) VALUES \\(1, ");

                result.append(System.lineSeparator() + lineContent);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        result.append(System.lineSeparator()+"alter table "+file.getName().replaceAll(".sql","")+"  CHECK constraint all;"+System.lineSeparator());
        return result.toString();
    }

    // 读取文件夹下所有文件
    public static List<File> getFile(File file) {
        List<File> listLocal = new ArrayList<>();
        if (file != null) {
            File[] f = file.listFiles();
            if (f != null) {
                for (int i = 0; i < f.length; i++) {
                    //递归查找所有文件夹下面的文件。
//                    getFile(f[i]);
                    if (f[i].length()!=0) listLocal.add(f[i]);
                }
            } else {
                System.out.println("exception");
            }
        }
        return listLocal;
    }

    /**
     *功能描述    拿到所有文本文件中的内容。
     * @author liYuan
     * @date 2022/11/1 7:27
      * @param path
     * @return java.lang.String
     */
    public static String getTxt(String path) throws FileNotFoundException {
        // 文件夹
        File all = new File(path);

        StringBuilder content = new StringBuilder();
        //将全部txt文件存到list中
        List<File> allPath = getFile(all);
        // 读取txt内容 ,将每一个txt内容拼接起来。
        for(int i = 0 ;i <allPath.size();i++){
            File file = allPath.get(i);
            content.append(txt2String(file))  ;
        }

        return content.toString();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值