欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件的方法

 更新時(shí)間:2022年06月16日 09:37:42   作者:貍子橘花茶  
這篇文章主要介紹了Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

遞歸查找文件

引言

或許是文件太多,想找某個(gè)文件又忘記放哪了;又或者是項(xiàng)目改造,需要將外部調(diào)用接口進(jìn)行改造,項(xiàng)目太多,又無(wú)法排查。那么怎么快速找到自己想要的內(nèi)容就是一件值得思考的事情了。

根據(jù)特定內(nèi)容尋找文件位置

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";

        // 需要查找的文件內(nèi)容
        String content = "/queryBattle";

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

        // 獲取文件目錄
        File filePath = new File(file);

        // 獲取文件目錄下每個(gè)項(xiàng)目
        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();

        // 如果該文件沒(méi)有權(quán)限查看,略過(guò)
        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);
                        }
                    }
                }
            }
        }
    }
}

效果如圖所示

根據(jù)文件類型和文件名關(guān)鍵字查找相關(guān)文件

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);
        // 需要查找的文件內(nèi)容
        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();
        // 如果該文件沒(méi)有權(quán)限查看,略過(guò)
        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 == "") {
                            // 沒(méi)有關(guān)鍵字默認(rèn)查詢指定類型的所有文件
                            System.out.println(metafile.getAbsolutePath());
                        } else {
                            // 如果有關(guān)鍵字就利用關(guān)鍵字查找
                            if (metafile.getName().contains(content)) {
                                System.out.println(metafile.getAbsolutePath());
                            }
                        }
                    }
                }
            }
        }
    }
}

效果如下

Tips

在數(shù)據(jù)量大的情況下如何高效匹配字符串就是成了一件需要解決的問(wèn)題,目前用的是String的暴力匹配,對(duì)于更優(yōu)的匹配算法,像KMP算法之后也會(huì)去介紹的

到此這篇關(guān)于Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件的文章就介紹到這了,更多相關(guān)Java遞歸查找特定內(nèi)容的文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 獲取當(dāng)前函數(shù)名的實(shí)現(xiàn)代碼

    java 獲取當(dāng)前函數(shù)名的實(shí)現(xiàn)代碼

    以下是對(duì)使用java獲取當(dāng)前函數(shù)名的實(shí)現(xiàn)代碼進(jìn)行了介紹。需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • Java多線程中的wait與notify方法詳解

    Java多線程中的wait與notify方法詳解

    這篇文章主要介紹了Java多線程中的wait與notify方法詳解,線程的調(diào)度是無(wú)序的,但有些情況要求線程的執(zhí)行是有序的,因此,我們可以使用 wait() 方法來(lái)使線程執(zhí)行有序,需要的朋友可以參考下
    2023-08-08
  • Java的內(nèi)存分配與回收策略詳解

    Java的內(nèi)存分配與回收策略詳解

    這篇文章主要介紹了Java的內(nèi)存分配與回收策略詳解,對(duì)象的內(nèi)存分配,就是在堆上分配,對(duì)象主要分配在新生代的 Eden 區(qū)上,少數(shù)情況下可能直接分配在老年代,分配規(guī)則不固定,取決于當(dāng)前使用的垃圾收集器組合以及相關(guān)的參數(shù)配置,需要的朋友可以參考下
    2023-08-08
  • SpringCloud Gateway使用詳解

    SpringCloud Gateway使用詳解

    Spring Cloud Gateway是一個(gè)基于Spring Boot 2.x和Spring WebFlux的API網(wǎng)關(guān),可以幫助我們構(gòu)建微服務(wù)架構(gòu)中的統(tǒng)一入口。感興趣的同學(xué)可以參考一下
    2023-04-04
  • idea導(dǎo)入module全流程

    idea導(dǎo)入module全流程

    這篇文章主要介紹了idea導(dǎo)入module全流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java 根據(jù)某個(gè) key 加鎖的實(shí)現(xiàn)方式

    Java 根據(jù)某個(gè) key 加鎖的實(shí)現(xiàn)方式

    日常開(kāi)發(fā)中,有時(shí)候需要根據(jù)某個(gè) key 加鎖,確保多線程情況下,對(duì)該 key 的加鎖和解鎖之間的代碼串行執(zhí)行,這篇文章主要介紹了Java 根據(jù)某個(gè) key 加鎖的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-03-03
  • Java8在遍歷集合時(shí)刪除元素問(wèn)題解決

    Java8在遍歷集合時(shí)刪除元素問(wèn)題解決

    本文主要介紹了Java8在遍歷集合時(shí)刪除元素問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • SpringBoot整合JWT的實(shí)現(xiàn)示例

    SpringBoot整合JWT的實(shí)現(xiàn)示例

    JWT是目前比較流行的跨域認(rèn)證解決方案,本文主要介紹了SpringBoot整合JWT的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring?this調(diào)用當(dāng)前類方法無(wú)法攔截的示例代碼

    Spring?this調(diào)用當(dāng)前類方法無(wú)法攔截的示例代碼

    這篇文章主要介紹了Spring?this調(diào)用當(dāng)前類方法無(wú)法攔截,通過(guò)debug 查看這個(gè)proxyService1 和this的區(qū)別,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Netty分布式客戶端處理接入事件handle源碼解析

    Netty分布式客戶端處理接入事件handle源碼解析

    這篇文章主要為大家介紹了Netty源碼分析客戶端流程處理接入事件handle創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評(píng)論