上周突然遇到了个要查找历史sql的中是否包含某个字段的问题,Everting虽然可以查找某个后缀的文件,可是并不能搜索文件内容,所以就花费一点功夫自己写一个了。使用起来还是非常方便
1.单文件查找内容
2.单文件夹下读取所有文件,并查找内容
3.多层嵌套文件夹下查找文件内容
4.添加字符串匹配、忽略大小写
5.后续感觉可以添加多种搜索条件,如日期、创建人……,组合搜索功能。
6.打成exe形式的可执行软件
作用:可以快速查找某个盘内所有文件的文件内容,匹配我们所要查找的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /** * 递归便利某个盘内文件的内容 * @author 25050 * */ public class Test { private static String FileName = "C:\\Users\\Eric\\Desktop\\test"; private static String FileEnd = "txt";// 文件名称后缀 txt sql bat private static String SearchStr = "aaa";//要查找的字符串 private static Boolean IngronCase = true;// 是否区分大小写 private static List<String> pathlist = new ArrayList<>(); public static void main(String[] args) { List<String> resultList = new ArrayList<>(); int count = 0; pathlist = getFileList(FileName); for(int k=0;k<pathlist.size();k++) { File file = new File(pathlist.get(k)); if (file.exists()) { String s = file.toString(); count++; System.out.println("正在读取第" + count + "个文件" + s); /* 读取数据 */ try { BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(new File(s)), "UTF-8")); String lineTxt = null; while ((lineTxt = br.readLine()) != null) { if (IngronCase) { if (lineTxt.contains(SearchStr)) { resultList.add("在【" + s + "】文件中找到了" + SearchStr ); break; } } else { if (lineTxt.toLowerCase().contains(SearchStr.toLowerCase())) { resultList.add("在【" + s + "】文件中找到了" + SearchStr ); break; } } } br.close(); } catch (Exception e) { // TODO: handle exception System.err.println("读取文件错误 :" + e); } } } System.out.println("===============输出结果==============="); // 输出结果 for (int i = 0; i < resultList.size(); i++) { System.out.println(resultList.get(i)); } } public static List<String> getFileList(String strPath) { File dir = new File(strPath); File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组 if (files != null) { for (int i = 0; i < files.length; i++) { String fileName = files[i].getName(); if (files[i].isDirectory()) { // 判断是文件还是文件夹 getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径 } else if (fileName.endsWith("."+FileEnd)) { // 判断文件名是否以.avi结尾 String strFileName = files[i].getAbsolutePath(); pathlist.add(strFileName); } else { continue; } } } return pathlist; } }