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

2022-08-19 00:00:00 文件 字符串 扫描

目录

      • 一、工具类
      • 二、扫描文件夹下所有文件
      • 三、扫描文件夹下所有文件,排除指定文件夹
      • 四、扫描文件夹下指定类型文件
      • 五、扫描文件夹下指定类型文件,排除指定文件夹
      • 六、在指定文件中搜索字符串
      • 七、在文件夹下指定类型的文件中搜索字符串
      • 八、在文件夹下指定类型的文件中搜索字符串,排除指定文件夹
      • 九、在指定文件夹下的所有可读文件中搜索字符串
      • 十、在指定文件夹下的所有可读文件中搜索字符串,排除指定文件夹
      • 十、打成jar包使用

一、工具类

package com.xu.tao.service;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class SearchWord { 

    //当要在文件中搜索内容时,遇到以下非文本文件跳过
    public static List<String> excludeFileType = Arrays.asList("jar", "zip", "rar", "7z", "tar", "gz", "xz", "bz2", "doc",
            "xls", "ppt", "pdf", "docx", "xlsx", "pptx", "jpg", "jpge", "gif", "png", "xltd","war","hprof",
            "tiff", "svg", "psd", "mp3", "aac", "mp4", "avi", "flv", "mkv", "mkv", "mpeg", "msi","tgz","rmvb",
            "mov", "wav", "raw", "dll", "ttf", "ttc", "fon", "iso", "isz", "esd", "wim", "gho", "dmg", "mpf", "exe");

    /** * 搜索指定文件中的关键字 * * @param filePath 要搜索的文件路径 * @param searchStr 要搜索的关键字 * @return 返回的 map<行数, 该行内容> */
    public static Map<Integer, String> scanFile(String filePath, String searchStr) { 
        Map<Integer, String> 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;
    }

    /** * 扫描dirPath下所有文件 * * @param dirPath 要搜索的文件夹路径 * @return 返回所有文件的路径 */
    public static List<String> getAllFilesPath(String dirPath) { 
        List<String> list = new ArrayList<>();
        return getAll_FilesPath(dirPath, list);
    }

    /** * 扫描dirPath下所有文件 * * @param dirPath 要搜索的文件夹路径 * @param excludeDir 不扫描的文件夹名列表 * @return 返回所有文件的路径 */
    public static List<String> getAllFilesPathEx(String dirPath, List<String> excludeDir) { 
        List<String> list = new ArrayList<>();
        return getAll_FilesPath(dirPath, list, excludeDir);
    }

    /** * 扫描dirPath下的所有文件类型是fileType的文件 * * @param dirPath 要搜索的文件夹路径 * @param fileType 文件后缀,要扫描的文件的类型 * @return 返回所有fileType类型文件的路径 */
    public static List<String> getAllFilesPath(String dirPath, List<String> fileType) { 
        List<String> list = new ArrayList<>();
        return getAllFiles(dirPath, fileType, list);
    }

    /** * 扫描dirPath下的所有文件类型是fileType的文件 * * @param dirPath 要搜索的文件夹路径 * @param fileType 文件后缀,要扫描的文件的类型 * @param excludeDir 不扫描的文件夹名列表 * @return 返回所有fileType类型文件的路径 */
    public static List<String> getAllFilesPath(String dirPath, List<String> fileType, List<String> excludeDir) { 
        List<String> list = new ArrayList<>();
        return getAllFiles(dirPath, fileType, list, excludeDir);
    }

    /** * @param dirPath 要搜索的文件夹路径 * @param searchStr 要搜索的关键字 * @param fileType 要搜索的文件后缀 * @return <文件名, <行数, 该行内容>> */
    public static Map<String, Map<Integer, String>> searchFiles(String dirPath, String searchStr, List<String> fileType) { 
        return searchFiles(dirPath, searchStr, fileType, null);
    }

    /** * @param dirPath 要搜索的文件夹路径 * @param searchStr 要搜索的关键字 * @param fileType 要搜索的文件后缀 * @param excludeDir 不扫描的文件夹名列表 * @return <文件名, <行数, 该行内容>> */
    public static Map<String, Map<Integer, String>> searchFiles(String dirPath, String searchStr, List<String> fileType, List<String> excludeDir) { 
        List<String> allFiles = excludeDir == null || excludeDir.size() == 0 ? getAllFilesPath(dirPath, fileType) : getAllFilesPath(dirPath, fileType, excludeDir);
        Map<String, Map<Integer, String>> searchInfo = new LinkedHashMap<>();
        for (String f : allFiles) { 
            System.out.println("正在文件中搜索,当前搜索文件:" + f);
            Map<Integer, String> map = scanFile(f, searchStr);
            if (map.size() != 0) { 
                searchInfo.put(f, map);
            }
        }
        return searchInfo;
    }


    /** * 搜索文件夹下所有可读文件中是否含有要查找的关键字 * * @param dirPath 要搜索的文件夹路径 * @param searchStr 要搜索的关键字 * @return <文件名, <行数, 该行内容>> */
    public static Map<String, Map<Integer, String>> searchAllFiles(String dirPath, String searchStr) { 
        return searchAllFiles(dirPath, searchStr, null);
    }

    /** * 搜索文件夹下所有可读文件中是否含有要查找的关键字 * * @param dirPath 要搜索的文件夹路径 * @param searchStr 要搜索的关键字 * @param excludeDir 不扫描的文件夹名列表 * @return <文件名, <行数, 该行内容>> */
    public static Map<String, Map<Integer, String>> searchAllFiles(String dirPath, String searchStr, List<String> excludeDir) { 
        List<String> allFiles = excludeDir == null || excludeDir.size() == 0 ? getAllReadFilessPath(dirPath, new ArrayList<>(), null) : getAllReadFilessPath(dirPath, new ArrayList<>(), excludeDir);
        Map<String, Map<Integer, String>> searchInfo = new LinkedHashMap<>();
        for (String f : allFiles) { 
            System.out.println("正在文件中搜索,当前搜索文件:" + f);
            Map<Integer, String> map = scanFile(f, searchStr);
            if (map.size() != 0) { 
                searchInfo.put(f, map);
            }
        }
        return searchInfo;
    }

    /** * @param dirPath 要搜索的文件夹路径 * @param searchStr 要搜索的关键字 * @param fileType 要搜索的文件后缀 * @return <文件名, <行数, 该行内容>> */
    public static void searchAndPrint(String dirPath, String searchStr, List<String> fileType) { 
        Map<String, Map<Integer, String>> map = SearchWord.searchFiles(dirPath, searchStr, fileType);
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> n : m.getValue().entrySet()) { 
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

    //获取所有的文件路径,excludeDir是要跳过查询的文件夹名列表
    public static List<String> getAllReadFilessPath(String dirPath, List<String> list, List<String> 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 (!excludeFileType.contains(file_Type)) { 
                        list.add(filePath);
                    }
                } else { 
                    if (excludeDir == null || excludeDir.size() == 0) { 
                        getAllReadFilessPath(filePath, list, excludeDir);
                    } else { 
                        String dirName = filePath.substring(filePath.lastIndexOf(File.separator) + 1);
                        if (!excludeDir.contains(dirName)) { 
                            //如果是文件夹则递归
                            getAllReadFilessPath(filePath, list, excludeDir);
                        }
                    }
                }
            }
        }
        return list;
    }

    //获取文件夹下所有的文件路径,excludeDir是要跳过查询的文件夹名列表
    public static List<String> getAll_FilesPath(String dirPath, List<String> list, List<String> 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(File.separator) + 1);
                        if (!excludeDir.contains(dirName)) { 
                            //如果是文件夹则递归
                            getAll_FilesPath(filePath, list, excludeDir);
                        }
                    }
                }
            }
        }
        return list;
    }

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

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

    //获取所有的文件路径,fileType是所有要查询的文件类型,excludeDir是要跳过查询的文件夹名列表
    public static List<String> getAllFiles(String dirPath, List<String> fileType, List<String> list, List<String> 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(File.separator) + 1);
                        if (!excludeDir.contains(dirName)) { 
                            //如果是文件夹则递归
                            getAllFiles(filePath, fileType, list, excludeDir);
                        }
                    }
                }
            }
        }
        return list;
    }
}



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

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

    public static void main(String[] args) { 
        String dir = "D:\\迅雷下载\\";
        List<String> 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.1\laydate\laydate.js
D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font\iconfont.woff
D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\laydate.css
D:\迅雷下载\layDate-v5.3.1\test.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<String> excludeDir = Arrays.asList("layDate-v5.3.1");
        List<String> 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<String> filesType = Arrays.asList("jar","zip","txt");
        List<String> 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<String> filesType = Arrays.asList("jar","zip","txt");
        List<String> excludeDir = Arrays.asList("新建文件夹");
        List<String> 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<Integer, String> map = SearchWord.scanFile(filePath,searchWord);
        for(Map.Entry<Integer, String> entry : map.entrySet()){ 
            System.out.println("第"+entry.getKey()+"行:"+entry.getValue());
        }
     }

输出:

67:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-开始插入数据库list大小:368:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:4269:[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<String> fileType = Arrays.asList("txt", "log");
        Map<String, Map<Integer, String>> map = SearchWord.searchFiles(dir, searchStr, fileType);
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> 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大小:368:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:4269:[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-1419行:insertData-firmpv:120行:insertData-firmuv:121行:insertData-userpv:122行:insertData-useruv:1

八、在文件夹下指定类型的文件中搜索字符串,排除指定文件夹

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

    public static void main(String[] args) {    
	    String dir = "D:\\迅雷下载\\";
        String searchStr = "insertData";
        List<String> fileType = Arrays.asList("txt", "log");
        List<String> excludeDir = Arrays.asList("新建文件夹"); //遇到文件夹名为"新建文件夹"则跳过该文件夹
        Map<String, Map<Integer, String>> map = SearchWord.searchFiles(dir, searchStr, fileType, excludeDir);
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> 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大小:368:[http-nio-8080-exec-339  2021 Dec 27 15:10:42]insertData-nowadays:2021-12-27 15:10:4269:[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:\迅雷下载\ 文件夹下所有文本文件中查找关键字 ssssss,默认不会搜索音乐、视频等非文本文件

 		 String dir = "D:\\迅雷下载\\";
        String searchStr ="ssssss";
        Map<String, Map<Integer, String>> map = SearchWord.searchAllFiles(dir, searchStr);
        System.out.println("");
        System.out.println("--------------------------------------------------------");
        System.out.println("搜索完成,结果:");
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> n : m.getValue().entrySet()) { 
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

输出:

正在扫描文件夹:D:\迅雷下载\
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\laydate
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\laydate\theme
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\文档
正在扫描文件夹:D:\迅雷下载\test
正在扫描文件夹:D:\迅雷下载\新建文件夹
正在文件中搜索,当前搜索文件:D:\迅雷下载\aaa
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font\iconfont.eot
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font\iconfont.woff
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\laydate.css
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\test.html
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\文档\官网.url


--------------------------------------------------------
搜索完成,结果:
文件路径: D:\迅雷下载\aaa
第1行:ssssss

十、在指定文件夹下的所有可读文件中搜索字符串,排除指定文件夹

在 D:\迅雷下载\ 文件夹下排查指定文件夹,然后在所有文本文件中查找关键字 ssssss,默认不会搜索音乐、视频等非文本文件

    public static void main(String[] args) throws IOException { 
        String dir = "D:\\迅雷下载\\";
        String searchStr ="ssssss";
        List<String> excludeDir = Arrays.asList("laydate"); //遇到文件夹名为"新建文件夹"则跳过该文件夹
        Map<String, Map<Integer, String>> map = SearchWord.searchAllFiles(dir, searchStr,excludeDir);
        System.out.println("");
        System.out.println("--------------------------------------------------------");
        System.out.println("搜索完成,结果:");
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> n : m.getValue().entrySet()) { 
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

输出:

正在扫描文件夹:D:\迅雷下载\
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1
正在扫描文件夹:D:\迅雷下载\layDate-v5.3.1\文档
正在扫描文件夹:D:\迅雷下载\test
正在扫描文件夹:D:\迅雷下载\新建文件夹
正在文件中搜索,当前搜索文件:D:\迅雷下载\aaa
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font\iconfont.eot
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\font\iconfont.woff
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\laydate\theme\default\laydate.css
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\test.html
正在文件中搜索,当前搜索文件:D:\迅雷下载\layDate-v5.3.1\文档\官网.url


--------------------------------------------------------
搜索完成,结果:
文件路径: D:\迅雷下载\aaa
第1行:ssssss

十、打成jar包使用

    public static void main(String[] args) throws IOException { 
        List<String> excludeDir = Arrays.asList("laydate"); //遇到文件夹名为"新建文件夹"则跳过该文件夹
        String dir = ""; //要扫描的文件夹
        String searchStr = ""; //要查找的字符串
        String[] array = null; //不查找的文件夹名
        for (int i = 0; i < args.length; i++) { 
            if (i == 0) { 
                dir = args[i];
            }else if (i == 1) { 
                searchStr = args[i];
            }else if (i == 2) { 
                String tempDirs = args[i];
                array = tempDirs.split(",");
            }
            System.out.println("参数" + (i + 1) + "的值为:" + args[i]);
        }
        Map<String, Map<Integer, String>> map = array == null ? SearchWord.searchAllFiles(dir, searchStr) : SearchWord.searchAllFiles(dir, searchStr, new ArrayList<>(Arrays.asList(array)));
        System.out.println("");
        System.out.println("--------------------------------------------------------");
        System.out.println("搜索完成,结果:");
        for (Map.Entry<String, Map<Integer, String>> m : map.entrySet()) { 
            System.out.println("文件路径: " + m.getKey());
            for (Map.Entry<Integer, String> n : m.getValue().entrySet()) { 
                System.out.println("第" + n.getKey() + "行:" + n.getValue());
            }
            System.out.println();
        }
    }

打成jar包后可放到服务器使用,假设打成scan.jar,命令如下:

java -jar scan.jar param1 param2 param3

其中param1为要扫描的文件夹,param2为要查找的字符串,param3为不查找的文件夹名通过逗号隔开

如:
查找D:\myFiles\文件夹下的文件中搜索含有love字符串的位置,遇到文件夹名为move或music则跳过该文件夹

java -jar scan.jar D:\myFiles\ love move,music
    原文作者:西凉的悲伤
    原文地址: https://blog.csdn.net/qq_33697094/article/details/122237127
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章