ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-16 00:31:14  阅读:128  来源: 互联网

标签:层级 Java String metafile System 文件夹 File println out


递归查找文件

引言

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

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

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);
                        }
                    }
                }
            }
        }
    }
}

效果如图所示
image

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

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());
                            }
                        }
                    }
                }
            }
        }
    }
}

效果如下
image

Tips

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

标签:层级,Java,String,metafile,System,文件夹,File,println,out
来源: https://www.cnblogs.com/yusishi/p/16380485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有