Java查搜索文件内容实现方式

 更新时间:2025年09月11日 08:50:51   作者:RedEric  
用户为解决无法搜索文件内容的问题,编写了一个支持单文件、文件夹及多层递归查找的工具,具备字符串匹配及忽略大小写功能,并计划扩展日期、创建人等组合搜索条件,最终打包成exe便于快速查找所有文件内容

Java查搜索文件内容

上周突然遇到了个要查找历史sql的中是否包含某个字段的问题,Everting虽然可以查找某个后缀的文件,可是并不能搜索文件内容,所以就花费一点功夫自己写一个了。使用起来还是非常方便!

  • 1.单文件查找内容
  • 2.单文件夹下读取所有文件,并查找内容
  • 3.多层嵌套文件夹下查找文件内容
  • 4.添加字符串匹配、忽略大小写
  • 5.后续感觉可以添加多种搜索条件,如日期、创建人……,组合搜索功能。
  • 6.打成exe形式的可执行软件

作用

可以快速查找某个盘内所有文件的文件内容,匹配我们所要查找的字符串

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 递归便利某个盘内文件的内容
 * @author 25050
 *
 */
public class Test {
    private static String FileName = "C:\\Users\\Eric\\Desktop\\test";

    private static String FileEnd = "txt";// 文件名称后缀 txt sql bat

    private static String SearchStr = "aaa";//要查找的字符串

    private static Boolean IngronCase = true;// 是否区分大小写

    private static List<String> pathlist = new ArrayList<>();

    public static void main(String[] args) {
        List<String> resultList = new ArrayList<>();
        int count = 0;
        pathlist = getFileList(FileName);
        for(int k=0;k<pathlist.size();k++) {
            File file = new File(pathlist.get(k));
            if (file.exists()) {
                String s = file.toString();
                count++;
                System.out.println("正在读取第" + count + "个文件" + s);
                /* 读取数据 */
                try {
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(new FileInputStream(new File(s)), "UTF-8"));
                    String lineTxt = null;
                    while ((lineTxt = br.readLine()) != null) {
                        if (IngronCase) {
                            if (lineTxt.contains(SearchStr)) {
                                resultList.add("在【" + s + "】文件中找到了" + SearchStr );
                                break;
                            }
                        } else {
                            if (lineTxt.toLowerCase().contains(SearchStr.toLowerCase())) {
                                resultList.add("在【" + s + "】文件中找到了" + SearchStr );
                                break;
                            }
                        }
                    }
                    br.close();
                } catch (Exception e) {
                    // TODO: handle exception
                    System.err.println("读取文件错误 :" + e);
                }
            }
        }
        System.out.println("===============输出结果===============");
        // 输出结果
        for (int i = 0; i < resultList.size(); i++) {
            System.out.println(resultList.get(i));
        }

    }

    public static List<String> getFileList(String strPath) {
        File dir = new File(strPath);
        File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                if (files[i].isDirectory()) { // 判断是文件还是文件夹
                    getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
                } else if (fileName.endsWith("."+FileEnd)) { // 判断文件名是否以.avi结尾
                    String strFileName = files[i].getAbsolutePath();
                    pathlist.add(strFileName);
                } else {
                    continue;
                }
            }

        }
        return pathlist;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java实现FTP文件上传与文件下载

    java实现FTP文件上传与文件下载

    这篇文章主要为大家详细介绍了java实现FTP文件上传与文件下载的相关资料,通过以下两种方式实现,通过JDK自带的API实现,二是通过Apache提供的API是实现,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • spring-data-jpa中findOne与getOne的区别说明

    spring-data-jpa中findOne与getOne的区别说明

    这篇文章主要介绍了spring-data-jpa中findOne与getOne的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 简单谈谈java中匿名内部类构造函数

    简单谈谈java中匿名内部类构造函数

    这篇文章主要简单给我们介绍了java中匿名内部类构造函数,并附上了简单的示例,有需要的小伙伴可以参考下。
    2015-11-11
  • 超详细讲解Java线程池

    超详细讲解Java线程池

    本文主要介绍了Java线程池,本文运用大量代码和图片讲解相关知识,感兴趣的小伙伴一起来看看吧
    2021-09-09
  • JDK 5 提供的注解:Target、Inherited和Documented的区别

    JDK 5 提供的注解:Target、Inherited和Documented的区别

    这篇文章主要介绍了JDK 5 提供的注解:Target、Inherited和Documented的区别,需要的朋友可以参考下
    2016-02-02
  • java获得mysql和oracle链接的类

    java获得mysql和oracle链接的类

    这篇文章主要介绍了java获得mysql和oracle链接的类,可实现基于jdbc的mysql与oracle数据库连接,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • SpringBoot3集成MyBatis详解

    SpringBoot3集成MyBatis详解

    MyBatis是一款开源的持久层框架,它极大地简化了与数据库的交互流程,MyBatis更具灵活性,允许开发者直接使用SQL语句与数据库进行交互,本文将详细介绍在Spring Boot项目中如何集成MyBatis,以实现对数据库的轻松访问和操作,需要的朋友可以参考下
    2023-12-12
  • 基于java实现斗地主代码实例解析

    基于java实现斗地主代码实例解析

    这篇文章主要介绍了基于java实现斗地主代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java中HTTP接口请求重试的实现方式

    Java中HTTP接口请求重试的实现方式

    HTTP接口请求重试是指在请求失败时,再次发起请求的机制,在实际应用中,由于网络波动、服务器故障等原因,HTTP接口请求可能会失败,为了保证系统的可用性和稳定性,需要对HTTP接口请求进行重试,所以本文给大家介绍了HTTP接口请求重试的实现方式,需要的朋友可以参考下
    2024-01-01
  • Java之ThreadPoolExecutor类详解

    Java之ThreadPoolExecutor类详解

    这篇文章主要介绍了Java之ThreadPoolExecutor类详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论