栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java文件扫描及多文件中查找字符串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java文件扫描及多文件中查找字符串

目录
      • 一、工具类
      • 二、扫描文件夹下所有文件
      • 三、扫描文件夹下所有文件,排除指定文件夹
      • 四、扫描文件夹下指定类型文件
      • 五、扫描文件夹下指定类型文件,排除指定文件夹
      • 六、在指定文件中搜索字符串
      • 七、在文件夹下指定类型的文件中搜索字符串
      • 八、在文件夹下指定类型的文件中搜索字符串,排除指定文件夹

一、工具类
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class SearchWord {
    
    public static Map scanFile(String filePath, String searchStr) {
        Map map = new linkedHashMap<>();
        FileInputStream file = null; //读取文件为字节流
        try {
            file = new FileInputStream(filePath);
            InputStreamReader in = new InputStreamReader(file, StandardCharsets.UTF_8); //字节流转化为字符流,以GBK读取防止中文乱码
            BufferedReader buf = new BufferedReader(in); //加入到缓存区
            String str = "";
            int row = 1;
            while ((str = buf.readLine()) != null) { //按行读取,到达最后一行返回null
                if (str.contains(searchStr)) {
                    map.put(row, str);
                }
                row++;
            }
            buf.close();
            file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return map;
    }

    
    public static List getAllFilesPath(String dirPath) {
        List list = new ArrayList<>();
        return getAll_FilesPath(dirPath, list);
    }

    
    public static List getAllFilesPathEx(String dirPath, List excludeDir) {
        List list = new ArrayList<>();
        return getAll_FilesPath(dirPath, list, excludeDir);
    }

    
    public static List getAllFilesPath(String dirPath, List fileType) {
        List list = new ArrayList<>();
        return getAllFiles(dirPath, fileType, list);
    }

    
    public static List getAllFilesPath(String dirPath, List fileType, List excludeDir) {
        List list = new ArrayList<>();
        return getAllFiles(dirPath, fileType, list, excludeDir);
    }

    
    public static Map> searchFiles(String dirPath, String searchStr, List fileType) {
        return searchFiles(dirPath, searchStr, fileType, null);
    }

    
    public static Map> searchFiles(String dirPath, String searchStr, List fileType, List excludeDir) {
        List allFiles = excludeDir == null || excludeDir.size() == 0 ? getAllFilesPath(dirPath, fileType) : getAllFilesPath(dirPath, fileType, excludeDir);
        Map> searchInfo = new linkedHashMap<>();
        for (String f : allFiles) {
            //System.out.println("正在文件中搜索,文件名:"+f);
            Map map = scanFile(f, searchStr);
            if (map.size() != 0) {
                searchInfo.put(f, map);
            }
        }
        return searchInfo;
    }

    
    public static void searchAndPrint(String dirPath, String searchStr, List fileType) {
        Map> map = SearchWord.searchFiles(dirPath, searchStr, fileType);
        for (Map.Entry> m : map.entrySet()) {
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry n : m.getValue().entrySet()) {
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

    //获取文件夹下所有的文件路径,excludeDir是要跳过查询的文件夹名列表
    public static List getAll_FilesPath(String dirPath, List list, List excludeDir) {
        File file = new File(dirPath);
        File[] tempList = file.listFiles();
        //System.out.println("正在扫描文件夹:"+dirPath);
        if (null != tempList) {
            for (int i = 0; i < tempList.length; i++) {
                String filePath = tempList[i].toString();
                if (tempList[i].isFile()) {
                    list.add(filePath);
                } else {
                    //如果是文件夹则递归
                    if (excludeDir == null || excludeDir.size() == 0) {
                        getAll_FilesPath(filePath, list);
                    } else {
                        String dirName = filePath.substring(filePath.lastIndexOf("\") + 1);
                        if (!excludeDir.contains(dirName)) {
                            //如果是文件夹则递归
                            getAll_FilesPath(filePath, list, excludeDir);
                        }
                    }
                }
            }
        }
        return list;
    }

    //获取文件夹下所有的文件路径
    public static List getAll_FilesPath(String path, List list) {
        return getAll_FilesPath(path, list, null);
    }

    //获取所有的文件路径,fileType是所有要查询的文件类型
    public static List getAllFiles(String dirPath, List fileType, List list) {
        return getAllFiles(dirPath, fileType, list, null);
    }

    //获取所有的文件路径,fileType是所有要查询的文件类型,excludeDir是要跳过查询的文件夹名列表
    public static List getAllFiles(String dirPath, List fileType, List list, List excludeDir) {
        File file = new File(dirPath);
        File[] tempList = file.listFiles();
        //System.out.println("正在扫描文件夹:"+dirPath);
        if (null != tempList) {
            for (int i = 0; i < tempList.length; i++) {
                String filePath = tempList[i].toString();
                String file_Type = filePath.substring(filePath.lastIndexOf(".") + 1);
                if (tempList[i].isFile()) {
                    //如果是文件
                    if (fileType.contains(file_Type)) {
                        list.add(filePath);
                    }
                } else {
                    if (excludeDir == null || excludeDir.size() == 0) {
                        getAllFiles(filePath, fileType, list);
                    } else {
                        String dirName = filePath.substring(filePath.lastIndexOf("\") + 1);
                        if (!excludeDir.contains(dirName)) {
                            //如果是文件夹则递归
                            getAllFiles(filePath, fileType, list, excludeDir);
                        }
                    }
                }
            }
        }
        return list;
    }
}

二、扫描文件夹下所有文件

​ 扫描D:迅雷下载文件夹下的所有文件

    public static void main(String[] args) {
        String dir = "D:\迅雷下载\";
        List filesPath = SearchWord.getAllFilesPath(dir);
        filesPath.forEach(System.out::println);
    }

输出:

D:迅雷下载1623720138.rar
D:迅雷下载codeNotes-master.zip
D:迅雷下载DittoSetup_64bit_3_24_184_0.exe
D:迅雷下载eclipse-inst-jre-win64.exe
D:迅雷下载eclipse-jee-2021-09-R-win32-x86_64.zip
D:迅雷下载fastjson-1.2.76.jar
D:迅雷下载guava-30.1.1-jre.jar
D:迅雷下载ideaIU-213.5605.12.exe
D:迅雷下载imageglass_8.2.6.6_x64.msi
D:迅雷下载latest-win64.zip.xltd
D:迅雷下载latest-win64.zip.xltd.cfg
D:迅雷下载layDate-v5.3.1laydatelaydate.js
D:迅雷下载layDate-v5.3.1laydatethemedefaultfonticonfont.woff
D:迅雷下载layDate-v5.3.1laydatethemedefaultlaydate.css
D:迅雷下载layDate-v5.3.1test.html
D:迅雷下载layDate-v5.3.1文档文档.url
D:迅雷下载layDate-v5.3.1更新日志.url
D:迅雷下载layDate-v5.3.1.zip
D:迅雷下载springboot-demo-maven-master.zip
D:迅雷下载yx12345sqlyog.rar
D:迅雷下载新建文件夹ideaIU-2021.1.1.exe
D:迅雷下载新建文件夹note.txt
三、扫描文件夹下所有文件,排除指定文件夹

扫描D:迅雷下载文件夹下的所有文件,不扫描"layDate-v5.3.1"文件夹下的文件

    public static void main(String[] args) {
        String dir = "D:\迅雷下载\";
        List excludeDir = Arrays.asList("layDate-v5.3.1");
        List filesPath = SearchWord.getAllFilesPathEx(dir,excludeDir);
        filesPath.forEach(System.out::println);
    }

输出:

D:迅雷下载1623720138.rar
D:迅雷下载codeNotes-master.zip
D:迅雷下载DittoSetup_64bit_3_24_184_0.exe
D:迅雷下载eclipse-inst-jre-win64.exe
D:迅雷下载eclipse-jee-2021-09-R-win32-x86_64.zip
D:迅雷下载fastjson-1.2.76.jar
D:迅雷下载guava-30.1.1-jre.jar
D:迅雷下载ideaIU-213.5605.12.exe
D:迅雷下载imageglass_8.2.6.6_x64.msi
D:迅雷下载latest-win64.zip.xltd
D:迅雷下载latest-win64.zip.xltd.cfg
D:迅雷下载layDate-v5.3.1.zip
D:迅雷下载springboot-demo-maven-master.zip
D:迅雷下载yx12345sqlyog.rar
D:迅雷下载新建文件夹ideaIU-2021.1.1.exe
D:迅雷下载新建文件夹note.txt
四、扫描文件夹下指定类型文件

​ 扫描D:迅雷下载文件夹下是jar、zip、txt类型的文件

    public static void main(String[] args) {        
        String dir = "D:\迅雷下载\";
        List filesType = Arrays.asList("jar","zip","txt");
        List filesPath = SearchWord.getAllFilesPath(dir,filesType);
        filesPath.forEach(System.out::println);
     }

输出:

D:迅雷下载codeNotes-master.zip
D:迅雷下载eclipse-jee-2021-09-R-win32-x86_64.zip
D:迅雷下载fastjson-1.2.76.jar
D:迅雷下载guava-30.1.1-jre.jar
D:迅雷下载layDate-v5.3.1.zip
D:迅雷下载springboot-demo-maven-master.zip
D:迅雷下载新建文件夹note.txt
五、扫描文件夹下指定类型文件,排除指定文件夹

扫描D:迅雷下载文件夹下是jar、zip、txt类型的文件,如果有文件夹名是 "新建文件夹"的则不扫描该文件夹下文件

    public static void main(String[] args) {        
        String dir = "D:\迅雷下载\";
        List filesType = Arrays.asList("jar","zip","txt");
        List excludeDir = Arrays.asList("新建文件夹");
        List filesPath = SearchWord.getAllFilesPath(dir,filesType,excludeDir);
        filesPath.forEach(System.out::println);
     }

输出:

D:迅雷下载codeNotes-master.zip
D:迅雷下载eclipse-jee-2021-09-R-win32-x86_64.zip
D:迅雷下载fastjson-1.2.76.jar
D:迅雷下载guava-30.1.1-jre.jar
D:迅雷下载layDate-v5.3.1.zip
D:迅雷下载springboot-demo-maven-master.zip
六、在指定文件中搜索字符串

​ 在server.log文件中搜索insertData关键字

    public static void main(String[] args) {        
        String filePath = "D:\迅雷下载\server.log";
        String searchWord = "insertData";
        Map map = SearchWord.scanFile(filePath,searchWord);
        for(Map.Entry entry : map.entrySet()){
            System.out.println("第"+entry.getKey()+"行:"+entry.getValue());
        }
     }

输出:

第67行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-开始插入数据库list大小:3
第68行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:42
第69行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-handleResult结束
第70行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-firm大小:15
七、在文件夹下指定类型的文件中搜索字符串

在 D:迅雷下载 下所有"txt", "log"类型的文件中查找关键字insertData

    public static void main(String[] args) {   
	    String dir = "D:\迅雷下载\";
        String searchStr = "insertData";
        List fileType = Arrays.asList("txt", "log");
        Map> map = SearchWord.searchFiles(dir, searchStr, fileType);
        for (Map.Entry> m : map.entrySet()) {
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry n : m.getValue().entrySet()) {
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

或者

    public static void main(String[] args) {   
		SearchWord.searchAndPrint(dir,searchStr,fileType);
    }

输出:

文件路径: D:迅雷下载server.log
第67行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-开始插入数据库list大小:3
第68行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:42
第69行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-handleResult结束
第70行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-firm大小:15
    
文件路径: D:迅雷下载新建文件夹note.txt
第15行:insertData-插入数据库
第17行:insertData-fserviceid:21-14
第19行:insertData-firmpv:1
第20行:insertData-firmuv:1
第21行:insertData-userpv:1
第22行:insertData-useruv:1
八、在文件夹下指定类型的文件中搜索字符串,排除指定文件夹

在 D:迅雷下载 文件夹下所有"txt", "log"类型的文件中查找关键字insertData,如果文件夹名为 “新建文件夹” 则排除该文件夹的搜索

    public static void main(String[] args) {   
	    String dir = "D:\迅雷下载\";
        String searchStr = "insertData";
        List fileType = Arrays.asList("txt", "log");
        List excludeDir = Arrays.asList("新建文件夹"); //遇到文件夹名为"新建文件夹"则跳过该文件夹
        Map> map = SearchWord.searchFiles(dir, searchStr, fileType, excludeDir);
        for (Map.Entry> m : map.entrySet()) {
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry n : m.getValue().entrySet()) {
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

输出:

文件路径: D:迅雷下载server.log
第67行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-开始插入数据库list大小:3
第68行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:42
第69行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-handleResult结束
第70行:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-firm大小:15
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号