目前实习,接到领导给安排的任务,将log
日志文件中的sql
语句整理出来(包含按条件筛选截取,去重),数据有20万条
,所以我考虑用IO流
去解决
这块我使用的是字符缓冲流去读取BufferedReader
和写入BufferedWriter
先去读取文件夹
FileReader reader=newFileReader("D:\\Program Files\\xxx\\sql.log");
读取文件中的数据,并存入到一个字符串中,便于做筛选、去重等操作
BufferedReader br=newBufferedReader(reader);
String text= null;
List<String> list=newArrayList<>();.........
list.add(text);
筛选,截取数据
sql
语句示范:2021-02-07 17:48:58 slow sql 0 millis. SELECT count(0) FROM org_unit_relation WHERE ((from_org_id = ?) AND (from_business_id <> ?))[-1730833917365171641,158912402929426432]
//取数据while((text= br.readLine())!= null){
k++;//筛选前//筛选:只要sql语句中包含 millis. SELECT 和 FROM org_ 或者 millis. select 和 from org_ 就选中(区别就是大小写)if((text.contains("millis. SELECT")&& text.contains("FROM org_"))||(text.contains("millis. select")&& text.contains("from org_"))){//截取:这里判断是否包含 [if(text.indexOf("[")==-1){//不包含,那么就从SELECT或者select开始截取
text= text.contains("SELECT")? text.substring(text.indexOf("SELECT")): text.substring(text.indexOf("select"));}else{//包含,那么就从SELECT或者select开始截取,到 [ 结束
text= text.contains("SELECT")? text.substring(text.indexOf("SELECT"), text.indexOf("[")): text.substring(text.indexOf("select"), text.indexOf("["));}
i++;//筛选后
list.add(text);//添加到字符串中}}
br.close();
去重
//去除重复元素
List<String> list1=newArrayList<>();for(String item: list){if(!list1.contains(item)){
list1.add(item);
j++;}}
将数据存入到备用文件,遍历(换行)
BufferedWriter bw=newBufferedWriter(newFileWriter("D:\\Program Files\\xxx\\sql备份.log"));//遍历for(String s: list1){
bw.write(s+"\r\n");}
bw.close();
至此,任务完成
完整代码展示
/**
* @Author: jl
* @Version: 1.0
* @Date: 2021/01/22 9:32
*/publicclassFileFilter1{publicstaticvoidmain(String[] args)throws IOException{
BufferedWriter bw=newBufferedWriter(newFileWriter("D:\\Program Files\\xxx\\sql备份.log"));
FileReader reader= null;int k=0;//筛选前int i=0;//筛选后int j=0;//去重后try{
reader=newFileReader("D:\\Program Files\\xxx\\sql.log");
BufferedReader br=newBufferedReader(reader);
String text= null;
List<String> list=newArrayList<>();//取数据while((text= br.readLine())!= null){
k++;//筛选:只要sql语句中包含 millis. SELECT 和 FROM org_ 或者 millis. select 和 from org_ 就选中(区别就是大小写)if((text.contains("millis. SELECT")&& text.contains("FROM org_"))||(text.contains("millis. select")&& text.contains("from org_"))){//截取:这里判断是否包含 [if(text.indexOf("[")==-1){//不包含,那么就从SELECT或者select开始截取
text= text.contains("SELECT")? text.substring(text.indexOf("SELECT")): text.substring(text.indexOf("select"));}else{//包含,那么就从SELECT或者select开始截取,到 [ 结束
text= text.contains("SELECT")? text.substring(text.indexOf("SELECT"), text.indexOf("[")): text.substring(text.indexOf("select"), text.indexOf("["));}
i++;
list.add(text);}}
br.close();//去除重复元素
List<String> list1=newArrayList<>();for(String item: list){if(!list1.contains(item)){
list1.add(item);
j++;}}
System.out.println("筛选前"+ k);
System.out.println("筛选后"+ i);
System.out.println("去重后"+ j);//遍历for(String s: list1){
bw.write(s+"\r\n");}
bw.close();}catch(FileNotFoundException e){
e.printStackTrace();}catch(IOException e){
e.printStackTrace();}}}