java实现读取大量文件并通过正则识别文件内容并生成新的文件(同上一篇python同样功能)

###    最近在开发中有一个实际问题是,经常会有上千个.ksc文件(类似.txt)每份文件7k左右大小需要提取文件内容将并将文件内容写入其他目标文件中,最终读取目标文件字段提高开发效率。

###    这里尝试用java实现以下,遇到了很多坑,感觉和python比起来,python太强大了,不过,java的缓冲是真的好用,感觉这里最值得注意的是java中的flush,不及时清缓存不能及时写入目标文件。上代码:

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ksc {
    public static void main(String[] args) {
        try{
            File file = new File("C:/Users/new/Desktop/ksc/ksc");
            File txtFile = new File("C:/Users/new/Desktop/ksc/ksc1.txt");
            BufferedWriter bw  = new BufferedWriter(new FileWriter(txtFile));

            if(file.isDirectory()){     //当前路径是目录
                if(file.list() != null){//目录不为空
                    System.out.println("**************"+file.list().length);
                    for(File f:file.listFiles()){   //遍历文件
                        BufferedReader br = new BufferedReader(new FileReader(f));
                        StringBuffer stringBuffer = new StringBuffer();
                        stringBuffer.append(f.getName()+":");
                        String line = new String("");
                        while((line = br.readLine()) != null){
                            stringBuffer.append(line);
                        }

                        String var = stringBuffer.toString();
                        System.out.println(f.getName()+"--"+var);
                        Pattern pattern = Pattern.compile("karaoke.tag\\('colors', '[0-9]+'\\)");   //这里要注意正则有特殊要进行转义的符号如()...,这里用双斜杠
                        Matcher m = pattern.matcher(var);
                        if(m.find()){
                            Pattern pattern1 = Pattern.compile("[0-9]+");
                            Matcher matcher = pattern1.matcher(m.group());
                            if(matcher.find()){
                                System.out.println(m.group());
                                bw.write("{\""+f.getName()+"\" : "+"\""+matcher.group()+"\"}");
                                bw.newLine();
                                bw.flush();     //flush是清空缓冲区,就是说立即输出到输出目的地,而不是等缓冲区满了再输出,write只是将数据输出到缓冲区,还没有输出到目的地。
                            }
                        }
                        br.close();
                    }

                }
            }
            bw.close();

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值