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

这篇博客介绍了如何使用Java代码来查找指定文件夹内包含特定字符串的文件。作者指出,在遇到需要修改常量字符串的情况时,可以避免使用全局搜索和替换,而是编写一个简单的Java工具来实现这一功能。文章提到了IDEA的全局搜索和替换以及推荐的一款用于搜索本地文件的软件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
    }
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值