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

目录
  • 递归查找文件
    • 引言
    • 根据特定内容寻找文件位置
    • 根据文件类型和文件名关键字查找相关文件
    • Tips

递归查找文件

引言

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

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

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递归查找特定内容的文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java查找文件夹下最新生成的文件的方法

    java 操作文件是非常重要的,主要是操作File类,这里一起探讨下,java怎么查找文件夹下最新生成的文件,希望对大家有帮助,谢谢 第一步 在本地电脑上找一个目录,包含几个文件,修改的时间有差别: 第二步 打开eclipse创建一个测试类,主要操作File类: 第三步 编写一个递归方法,可以变量这个目录下所有的文件,并输出文件的路径,和最后修改时间 第四步 定义main函数,调用递归函数,输出所有文件的修改时间: 第五步 修改print方法,记录出最近修改的文件路径和修改的时间: java如何

  • java对于目录下文件的单词查找操作代码实现

    这篇文章主要介绍了java对于目录下文件的单词查找操作代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 写入文件的目录.代码通过找目录下的文件,进行相关函数的操作.如果目录下面包含子目录.代码设有调用递归的方法,在寻找子目录下的文件 在进行相关的函数操作.函数主要是按用户输入的个数要求输出文件中出现次数最多的前几位字母. package com.keshangone; //将想要输出的数据写入新的文件里面 import java.util

  • Java 方法递归的思路详解

    目录 前言 一.什么是方法递归 二.什么场景下能用递归 三.如何写出递归代码-重点 总结 前言 今天给老铁们回顾一下递归的思路以及方法,也是给自己的一个归纳总结. 一.什么是方法递归 所谓的方法递归,就是在一个方法(函数)执行的内部,自己调用了自己的过程,称之为 “递归” . 递归分为两个子过程: 递过程:函数不断地调用自身,直到走到函数的终止条件,第一阶段结束. 归过程:函数不断地返回的过程. 例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束

  • Java实现指定目录下的文件查找详解

    Java实现指定目录下的文件查找 入门Java实现文件的查找功能较为简单,主要有以下两种: 1.给出文件名,查找目录及其子目录中是否存在 2.给出后缀名,查找目录及其子目录中相关的文件 题型一: 题目:在指定目录下查找一个文件,如果目录或子目录下有查找的文件,返回文件所在的目录,否则输出 “当前目录下没有此文件”. package hello; import java.io.File; import java.util.*; public class 第七周第二题 { public static

  • Java使用FilenameFilter查找出目录下指定后缀的文件示例

    本文实例讲述了Java使用FilenameFilter查找出目录下指定后缀的文件.分享给大家供大家参考,具体如下: 在项目中需要查找指定目录下特定后缀的文件,在jdk官网上查看资料时找到了FilenameFilter这个类,怎么用也写了,但是就是没给个例子,对有些人实在有些不方便,这也是写这篇文章的初衷,虽然简单但希望能帮到需要的小伙伴们 下面直接入正题,给出demo程序: package net.csdn.johnhuster; import java.io.File; import java

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

    目录 递归查找文件 引言 根据特定内容寻找文件位置 根据文件类型和文件名关键字查找相关文件 Tips 递归查找文件 引言 或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查.那么怎么快速找到自己想要的内容就是一件值得思考的事情了. 根据特定内容寻找文件位置 package com.lizi.globalexception.Utils; import java.io.BufferedReader; import java.io.File;

  • asp.net 获取指定文件夹下所有子目录及文件(树形)

    #region 获取指定文件夹下所有子目录及文件(树形)         /****************************************          * 函数名称:GetFoldAll(string Path)          * 功能说明:获取指定文件夹下所有子目录及文件(树形)          * 参    数:Path:详细路径          * 调用示列:          *           string strDirlist = Server.M

  • IDEA将Maven项目中指定文件夹下的xml等文件编译进classes的方法

    出处:https://www.cnblogs.com/SunSpring eclipse下面创建的Maven项目,使用mybatis.eclipse里面能正常启动,在idea中一直卡在maybatis 加载位置. 1.首先是不报错也没反应.这个时候需要我们重写SqlSessionFactoryBean 让错误显示出来. public class BeanFactory extends SqlSessionFactoryBean { @Override protected SqlSessionFa

  • Linux 中批量提取文件夹下所有目录及文件名称

    1.当前目录下打开CMD控制台窗口,执行如下bat命令:dir *.*/b>文件名.txt 2.如下图例操作步骤: 打开CMD窗口 输入命令 生成文件 结果截图 总结 以上所述是小编给大家介绍的Linux 中批量提取文件夹下所有目录及文件名称 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

  • vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法

    由于最新版本的vue-cli已经放弃dev-server.js,需在webpack.dev.conf.js配置才行 新版本的webpack.dev.conf.js配置如下: const express require('express') const app =express() var appData = require('..data.json') var seller = appData.seller var goods = appData.goods var ratings = appD

  • python同步两个文件夹下的内容

    本文实例为大家分享了python同步两个文件夹下的内容,供大家参考,具体内容如下 import os import shutil import time import logging import filecmp #日志文件配置 log_filename ='synchro.log' #日志输出格式化 log_format = '%(filename)s [%(asctime)s] [%(levelname)s] %(message)s' logging.basicConfig(format=l

  • python顺序的读取文件夹下名称有序的文件方法

    如下所示: import os path="/home/test/" #待读取的文件夹 path_list=os.listdir(path) path_list.sort() #对读取的路径进行排序 for filename in path_list: print(os.path.join(path,filename)) 以上这篇python顺序的读取文件夹下名称有序的文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python 获取指定文件夹下的目录和文件的实现

    经常有需要扫描目录,对文件做批量处理的需求,所以对目录处理这块做了下学习和总结.Python 中扫描目录有两种方法:os.listdir 和 os.walk. 一.os.listdir 方法 os.listdir() 方法用于返回指定的目录下包含的文件或子目录的名字的列表.这个列表以字母顺序.其得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归. 它也不包括 '.' 和 '..' 即使它在目录中. 语法格式如下: os.listdir(path) 实例代码 def

  • php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)

    本文实例分析了php文件操作的方法.分享给大家供大家参考,具体如下: 一.删除文件 unlink() 语法: int unlink(string filename); 返回值: 整数 函数种类: 文件存取.如: unlink("tmp/test.txt"); 二.获取文件夹下面的文件名 $dir = "message/"; // 文件夹的名称 if (is_dir($dir)){ if ($dh = opendir($dir)){ while (($file = r

随机推荐