Java 快速查找,从众多文本中查找含有某字符串的文件有哪几个

发布时间:2018-10-26作者:laosun阅读(988)

Java

快速从众多的文件中,查询哪个文件含有这句话。快速从文件中查找出含有这句话的文件是哪几个

    最近博主有一个需求,就是从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


0 +1

版权声明

 Java  源码

 请文明留言

0 条评论