Java递归查找层级文件夹下特定内容的文件的方法

 更新时间:2022年06月16日 09:37:42   作者:狸子橘花茶  
这篇文章主要介绍了Java递归查找层级文件夹下特定内容的文件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

递归查找文件

引言

或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查。那么怎么快速找到自己想要的内容就是一件值得思考的事情了。

根据特定内容寻找文件位置

package com.lizi.globalexception.Utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Date;

public class FindFileByContent {
    public static void main(String[] args) {
        // 需要查询的目录
        String file = "D:\\zpro";

        // 需要查找的文件后缀类型
        String fileType = "java";

        // 需要查找的文件内容
        String content = "/queryBattle";

        System.out.println("start   " + new Date());
        System.out.println();

        // 获取文件目录
        File filePath = new File(file);

        // 获取文件目录下每个项目
        findContent(filePath, fileType, content);

        System.out.println();
        System.out.println("end   " + new Date());
    }

    public static void findContent(File file, String fileType, String content) {
        // 获取目录下的所有文件
        File[] files = file.listFiles();

        // 如果该文件没有权限查看,略过
        if (files == null) {
            return;
        }

        for (File metafile : files) {
            if (metafile.isDirectory()) {

                // 递归查找
                findContent(metafile, fileType, content);
            } else {
                // 获取文件名
                String name = metafile.getName();

                // 查看文件是否有后缀
                int i = name.lastIndexOf(".");
                if (i >= 0) {
                    String suffix = name.substring(i + 1);

                    // 判断后缀是否为指定的类型
                    if (suffix.equals(fileType)) {
                        try {

                            // buffer每次读取一行
                            BufferedReader bufferedReader = new BufferedReader(new FileReader(metafile.getAbsolutePath()));
                            String str;
                            while ((str = bufferedReader.readLine()) != null) {
                                if (str.contains(content)) {
                                    System.out.println(metafile.getAbsolutePath());
                                    // 只要找到一处就返回
                                    break;
                                }
                            }
                        } catch (Exception e) {
                            System.out.println(e);
                        }
                    }
                }
            }
        }
    }
}

效果如图所示

根据文件类型和文件名关键字查找相关文件

package com.lizi.globalexception.Utils;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
public class FindLearningMaterials {
    public static void main(String[] args) {
        // 需要查询的目录
        String file = "D:\\";
        // 需要查找的文件后缀类型
        String fileType = "mp3,mp4";
        String[] split = fileType.split(",");
        List<String> list = Arrays.asList(split);
        // 需要查找的文件内容
        String content = "";
        System.out.println("start   " + new Date());
        System.out.println();
        // 获取文件目录
        File filePath = new File(file);
        // 递归查找
        findContent(filePath, list, content);
        System.out.println();
        System.out.println("end   " + new Date());
    }
    public static void findContent(File file, List<String> fileType, String content) {
        // 获取目录下的所有文件
        File[] files = file.listFiles();
        // 如果该文件没有权限查看,略过
        if (files == null) {
            return;
        }
        for (File metafile : files) {
            if (metafile.isDirectory()) {
                // 递归查找
                findContent(metafile, fileType, content);
            } else {
                // 获取文件名
                String name = metafile.getName();
                // 查看文件是否有后缀
                int i = name.lastIndexOf(".");
                if (i >= 0) {
                    String suffix = name.substring(i + 1);
                    // 判断后缀是否为指定的类型
                    if (fileType.contains(suffix)) {
                        if (content == "") {
                            // 没有关键字默认查询指定类型的所有文件
                            System.out.println(metafile.getAbsolutePath());
                        } else {
                            // 如果有关键字就利用关键字查找
                            if (metafile.getName().contains(content)) {
                                System.out.println(metafile.getAbsolutePath());
                            }
                        }
                    }
                }
            }
        }
    }
}

效果如下

Tips

在数据量大的情况下如何高效匹配字符串就是成了一件需要解决的问题,目前用的是String的暴力匹配,对于更优的匹配算法,像KMP算法之后也会去介绍的

到此这篇关于Java递归查找层级文件夹下特定内容的文件的文章就介绍到这了,更多相关Java递归查找特定内容的文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Idea创建Jsp项目完整版教程

    Idea创建Jsp项目完整版教程

    一直在使用eclipse,对idea嗤之以鼻,前些日子换成了idea以后觉得太香了,这篇文章主要给大家介绍了关于Idea创建Jsp项目的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • SpringBoot实现识别图片中的身份证号与营业执照信息

    SpringBoot实现识别图片中的身份证号与营业执照信息

    这篇文章主要为大家详细介绍了SpringBoot如何实现识别图片中的身份证号与营业执照信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2024-01-01
  • javaweb如何实现请求和响应

    javaweb如何实现请求和响应

    这篇文章主要为大家详细介绍了javaweb如何实现请求和响应,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    这篇文章主要介绍了详解Intellij IDEA中.properties文件中文显示乱码问题的解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 解决springboot项目不配置数据源启动报错问题

    解决springboot项目不配置数据源启动报错问题

    这篇文章主要介绍了解决springboot项目不配置数据源启动报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 分析Java并发编程之信号量Semaphore

    分析Java并发编程之信号量Semaphore

    Semaphore一般译作信号量,它也是一种线程同步工具,主要用于多个线程对共享资源进行并行操作的一种工具类。它代表了一种许可的概念,是否允许多线程对同一资源进行操作的许可,使用Semaphore可以控制并发访问资源的线程个数
    2021-06-06
  • SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法

    SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法

    这篇文章主要介绍了SpringBoot在启动类main方法中调用service层方法报“空指针异常“的解决办法,大多数情况下,我们使用Springboot是创建一个maven项目,然后通过controller层的接口调用,但也有特殊情况,文章介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • SpringBoot 利用thymeleaf自定义错误页面

    SpringBoot 利用thymeleaf自定义错误页面

    这篇文章主要介绍了SpringBoot 利用thymeleaf自定义错误页面,帮助大家更好的理解和使用springboot 框架,感兴趣的朋友可以了解下
    2020-11-11
  • Java中获取类路径classpath的简单方法(推荐)

    Java中获取类路径classpath的简单方法(推荐)

    下面小编就为大家带来一篇Java中获取类路径classpath的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JDK1.8源码下载及idea2021导入jdk1.8源码的详细步骤

    JDK1.8源码下载及idea2021导入jdk1.8源码的详细步骤

    这篇文章主要介绍了JDK1.8源码下载及idea2021导入jdk1.8源码的详细步骤,在文章开头就给大家分享了JDK1.8源码下载地址和下载步骤,告诉大家idea2021.1.3导入JDK1.8源码步骤,需要的朋友可以参考下
    2022-11-11

最新评论