发布时间:2018-10-26作者:laosun阅读(3281)
快速从众多的文件中,查询哪个文件含有这句话。快速从文件中查找出含有这句话的文件是哪几个
最近博主有一个需求,就是从300多个配置文件中,找出那项配置在哪个文件中,相信一般的才做可能会非常麻烦,虽然有的工具有个功能就是查找打开的文件,但是首先你得全部打开。博主无奈之下,自己写了一个小程序进行查找。
如下:FindInFile.java
import 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<String> suffixList = new ArrayList<>();// 需要统计的文件名后缀 private static final Set<File> 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
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/dee1f62e3adc419a950627303a3f1e13.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。