Java查搜索文件內(nèi)容實(shí)現(xiàn)方式
Java查搜索文件內(nèi)容
上周突然遇到了個(gè)要查找歷史sql的中是否包含某個(gè)字段的問題,Everting雖然可以查找某個(gè)后綴的文件,可是并不能搜索文件內(nèi)容,所以就花費(fèi)一點(diǎn)功夫自己寫一個(gè)了。使用起來還是非常方便!
- 1.單文件查找內(nèi)容
- 2.單文件夾下讀取所有文件,并查找內(nèi)容
- 3.多層嵌套文件夾下查找文件內(nèi)容
- 4.添加字符串匹配、忽略大小寫
- 5.后續(xù)感覺可以添加多種搜索條件,如日期、創(chuàng)建人……,組合搜索功能。
- 6.打成exe形式的可執(zhí)行軟件
作用
可以快速查找某個(gè)盤內(nèi)所有文件的文件內(nèi)容,匹配我們所要查找的字符串
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* 遞歸便利某個(gè)盤內(nèi)文件的內(nèi)容
* @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;// 是否區(qū)分大小寫
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 + "個(gè)文件" + s);
/* 讀取數(shù)據(jù) */
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("讀取文件錯(cuò)誤 :" + e);
}
}
}
System.out.println("===============輸出結(jié)果===============");
// 輸出結(jié)果
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(); // 該文件目錄下文件全部放入數(shù)組
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
if (files[i].isDirectory()) { // 判斷是文件還是文件夾
getFileList(files[i].getAbsolutePath()); // 獲取文件絕對(duì)路徑
} else if (fileName.endsWith("."+FileEnd)) { // 判斷文件名是否以.avi結(jié)尾
String strFileName = files[i].getAbsolutePath();
pathlist.add(strFileName);
} else {
continue;
}
}
}
return pathlist;
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java Socket編程實(shí)例(三)- TCP服務(wù)端線程池
這篇文章主要講解Java Socket編程中TCP服務(wù)端線程池的實(shí)例,希望能給大家做一個(gè)參考。2016-06-06
使用jvm sandbox對(duì)三層嵌套類型的改造示例
這篇文章主要為大家介紹了使用jvm sandbox對(duì)三層嵌套類型的改造示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Java concurrency線程池之線程池原理(四)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Java數(shù)組的動(dòng)態(tài)初始化和常見問題解析
本文介紹了數(shù)組動(dòng)態(tài)初始化的概念,即在初始化時(shí)僅指定數(shù)組長度,系統(tǒng)會(huì)為數(shù)組分配初始值,而靜態(tài)初始化則手動(dòng)指定數(shù)組元素,系統(tǒng)根據(jù)元素個(gè)數(shù)計(jì)算數(shù)組長度,這兩種初始化方式應(yīng)用場景不同,另外,還講述了數(shù)組默認(rèn)初始化值的規(guī)律及數(shù)組常見問題,如越界問題等2024-10-10
Java字節(jié)碼操縱框架ASM圖文實(shí)例詳解
這篇文章主要為大家介紹了Java字節(jié)碼操縱框架ASM圖文實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

