需求:
該工具能搜索文件夾目錄下的所有txt文件的內容,將內容中還有特定詞語的文件檢索出來
文件夾目錄和文件內容如圖所示:
文件內容如下表所示:
2021-02-01.txt | 今天我吃了一個蘋果 |
2021-02-05.txt | 我今天吃了一個梨 |
2021-02-07.txt | 今天我去動物園玩了 |
2021-02-08.txt | 我今天明白了一個人生道理 |
2021-02-13.txt | 我今天晚飯后吃了一個蘋果 |
2021-02-20.txt | 我今天去北京吃了一個梨,太好吃了 |
首先需要設計一個方法,傳入文件對象和需要檢索的字符串,返回一個是否包含的布爾值
這里如果使用String類的contains方法,需要將整個文件都讀入到內存中,浪費系統資源,效率不高。
所以這里考慮采用從前往后邊讀取邊判斷的算法:
public static boolean searchFile(File f,String keyword) throws IOException { FileReader fr = null; try { fr = new FileReader(f); } catch (FileNotFoundException e) { System.out.println("文件不存在!"); return false; } int c; int index = 0; while((c=fr.read())!=-1) { char ch = (char)c; if(ch == keyword.charAt(index)) { if(index==(keyword.length()-1)) { fr.close(); return true; }else { index++; continue; } }else { index=0; continue; } } fr.close(); return false; }
利用遞歸遍歷該目錄下所有的子文件夾:
public static void recursion(File f,String keyword) throws IOException { for(File ff:f.listFiles()) { if(ff.isDirectory()) { recursion(ff,keyword); }else { if(searchFile(ff,keyword)) { System.out.println(ff); } } } }
運行效果: