Java 快速查找,从众多文本中查找含有某字符串的文件有哪几个
发布时间:2018-10-26作者:laosun阅读(2430)
快速从众多的文件中,查询哪个文件含有这句话。快速从文件中查找出含有这句话的文件是哪几个
最近博主有一个需求,就是从300多个配置文件中,找出那项配置在哪个文件中,相信一般的才做可能会非常麻烦,虽然有的工具有个功能就是查找打开的文件,但是首先你得全部打开。博主无奈之下,自己写了一个小程序进行查找。
如下:FindInFile.javaimport java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Java 匹配字符串在哪个文件中
*
* @author sun
*/
public class FindInFile {
private static final String PATH = "/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/";// 检索目录
private static final List suffixList = new ArrayList<>();// 需要统计的文件名后缀
private static final Set fileList = new HashSet<>();// 匹配的文件名
private static final String content = "网格查看";// 需要查找的内容
private static int fileCount = 0;
static {
suffixList.add("strings");// 从后缀为.setting的文件中进行查找
}
public static void main(String[] args) {
long s = System.currentTimeMillis();
File file = new File(PATH);
getAllFile(file);
if (fileList != null && fileList.size() > 0) {
System.out.println("一共查询 "+fileCount+" 个文件");
System.out.println("含有 " + content + " 内容的文件如下:");
for (File f : fileList) {
System.out.println(f.getAbsolutePath());
}
} else {
System.err.println("无文件含有 " + content + " 内容");
}
long e = System.currentTimeMillis();
System.out.println("\n总耗时:" + (e - s));
}
public static void getAllFile(File file) {
BufferedReader br = null;
String s = null;
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
getAllFile(f);
}
} else {
if (file.getName().indexOf(".") != -1) {
String suffix = file.getName().substring(
file.getName().lastIndexOf(".") + 1);
if (suffixList.contains(suffix)) {
fileCount++;
try {
br = new BufferedReader(new FileReader(file));
while ((s = br.readLine()) != null) {
if (s.contains(content)) {
fileList.add(file);
break;
}
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
输出结果如下:
一共查询 377 个文件
含有 网格查看 内容的文件如下:
/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/SQLResultDatasetModule.strings
/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/TableViewViewController.strings
总耗时:153
1 +1
版权声明
分享到:
发表评论
请文明留言
发表
共 0 条评论