拆分一个2G多的sql
格式为
-- ----------------------------
BEGIN;
INSERT INTO "user" VALUES (xx,xxx,x,x);
...
COMMIT;
-- ----------------------------
BEGIN;
INSERT INTO "user2" VALUES (xx,xxx,x,x);
...
COMMIT;
需要分成 user..sql,user2.sql...,代码
private static String toDir = "D:\\SQL脚本\\";
private static String oldFile = "D:\\总SQL\\SQL.sql";
public static void main(String[] args) {
File file = new File(oldFile);
FileReader fileReader = null;
FileWriter fileWriter = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String line;
int flag = 0;
File file1 = null;
int i = 0;
while ((line = bufferedReader.readLine()) != null){
i++;
if (line.equals("BEGIN;")){
flag = 1;
}else if (line.startsWith("INSERT")){
if (flag == 1){
flag = 2;
}else {
flag = 3;
}
line = line.concat("\n");
}else {
flag = 0;
}
switch (flag){
case 2:
file1 = new File(toDir.concat(line.substring(line.indexOf("INSERT INTO \"")+13,line.indexOf("\" VALUES"))).concat(".sql"));
file1.createNewFile();
fileWriter = new FileWriter(file1);
fileWriter.write(line);
break;
case 3:
fileWriter.write(line);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileReader != null){
try {
fileReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
if (fileWriter != null ){
try {
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
因为循环创建FileWriter,导致部分数据数据丢失,有的文件为空。
解决办法,在一个新FileWirter创建前执行flush()
case 2: 里加上代码
private static String toDir = "D:\\SQL脚本\\";
private static String oldFile = "D:\\总SQL\\SQL.sql";
public static void main(String[] args) {
File file = new File(oldFile);
FileReader fileReader = null;
FileWriter fileWriter = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String line;
int flag = 0;
File file1 = null;
int i = 0;
while ((line = bufferedReader.readLine()) != null){
i++;
if (line.equals("BEGIN;")){
flag = 1;
}else if (line.startsWith("INSERT")){
if (flag == 1){
flag = 2;
}else {
flag = 3;
}
line = line.concat("\n");
}else {
flag = 0;
}
switch (flag){
case 2:
if (fileWriter != null){
fileWriter.flush();
}
file1 = new File(toDir.concat(line.substring(line.indexOf("INSERT INTO \"")+13,line.indexOf("\" VALUES"))).concat(".sql"));
file1.createNewFile();
fileWriter = new FileWriter(file1);
fileWriter.write(line);
break;
case 3:
fileWriter.write(line);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileReader != null){
try {
fileReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
if (fileWriter != null ){
try {
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}