### 最近在开发中有一个实际问题是,经常会有上千个.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();
}
}
}