Java 寻找指定文件夹里特定字符串

Java代码实现 寻找指定文件夹里特定字符串

在Java学习者的早期有一些不优雅的习惯,如常量字符串未命名(魔法值)而当这个值需要修改时,需要修改所有出现的地方,而自己都记不清哪里出现过,我们可以使用搜索工具查找,也可以自己写一个简单的工具,甚至还可以自动替换为希望的值。

不再推荐这样实现

  • 若搜索代码,IDEA里有全局搜索和替换:Edit - Find - Find in path
  • 若搜索本地文件,推荐 EveryThing 这个软件

代码

import java.io.*;
import java.util.ArrayList;

/** 
 * 找出特定文件夹下的所有代码中出现的某个字符串,并回显在哪里出现过
 */
public class Finder {

    private static final String BASE_DIR = "E:\\files\\code\\java\\xxx\\src\\main\\resources\\templates";
    //private static final String BASE_DIR = "E:\\files\\code\\java\\xxx\\src\\main\\java";

    private static ArrayList<File> fileArray = new ArrayList<File>();

    public static void main(String[] args) throws IOException {
        ArrayList<File> all = getFile(new File(BASE_DIR));
        String[] aimStrings = {"~{::link}"};
        for (File f : all) {
            find(f, aimStrings);
        }
    }

    /** 
     * 获得目录下的文件和子目录下的文件 
     */
    private static ArrayList<File> getFile(File f) {
        File[] ff = f.listFiles();  
        for (File child : ff) {  
            if (child.isDirectory()) {  
                getFile(child);  
            } else  
                fileArray.add(child);  
        }  
        return fileArray;  
  
    }

    private static void find(File file, String... aimStrings) throws IOException {
        if(aimStrings == null || aimStrings.length == 0)
            return;
        try (FileInputStream fis = new FileInputStream(file);
             InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader br = new BufferedReader(isr)){

            int lineNum = 1;
            String string; //存储对目标文件读取的内容
            while ((string = br.readLine()) != null){
                for (String aimStr : aimStrings){
                    if(string.contains(aimStr))
                        System.out.println(aimStr + " : " + (file.getAbsolutePath().replace(BASE_DIR, ""))  + " - " + lineNum);
                }
                lineNum ++;
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}  

你可能感兴趣的:(生活记录,工具和环境,java,字符串)