最近实施部的同事说,最近几次在实施的时候,发现开发过程中整理的脚本有很多“records committed...”和“commit;” 严重影响了执行脚本速度。让我帮其去除脚本里面的这些提示和提交命令,遂就用JAVA的文件操作帮其做了下处理。
去除方式为:
1、首先找到发布脚本所在的文件夹,读取里面所有的文件
2、遍历文件数组,找到要进行处理的文件。
3、用指定的编码字符集对文件进行解码,然后循环读取每一行并判断是否包含要去除的字段,如果有则跳过,否则把该行写入一个写缓冲器中,循环结束之后把写缓冲器写入指定文件夹。
代码如下:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class DeleteStrDemo {
private static int count;
public static void main(String[] args) throws IOException {
File dir=new File("E:\\DBSCript");
deleteStrPro(dir);
System.out.println("去除成功!");
System.out.println("共去除"+count+"行");
}
private static void deleteStrPro(File dir) throws IOException {
if(dir.isDirectory()){//判断是否是文件夹
File[] files=dir.listFiles();
if(null!=files){
for(File file:files){
if(!file.isDirectory()){
removeStrCore(file);//核心处理方法
}
}
}
}
}
/**
* 去除指定行的核心方法
* @param file
*/
private static void removeStrCore(File file)
{
BufferedReader bufferReader=null;//读缓冲器
BufferedWriter bufferWriter=null;//写缓冲器
try{
OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream("E:\\DBSCript\\process"+File.separator+file.getName()),"UTF-8");//指定写编码
InputStreamReader in=new InputStreamReader( new FileInputStream(file),"GBK");//指定读编码
bufferReader=new BufferedReader(in);//读缓冲器
bufferWriter=new BufferedWriter(out);//写缓冲器
while(bufferReader.ready()){
String line=bufferReader.readLine();
if(line.contains("records committed...")||line.equals("commit;")){
count++;
continue;
}
bufferWriter.write(line);
bufferWriter.newLine();
bufferWriter.flush();//刷新缓冲区
}
bufferReader.close();//关闭流
bufferWriter.close();
}catch(IOException e){
}finally{
try{
if(null!=bufferReader){
bufferReader.close();
}
if(null!=bufferWriter){
bufferWriter.close();
}
}catch(IOException e){}
}
}
}