- 项目背景:
- 功能需求:
- 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();
}
}