java搜索关键字_利用Java实现文件中的关键字查询

这是一个Java程序,用于在指定文件夹及其子文件夹中搜索含有特定关键字的文件。程序使用BufferedReader逐行读取文件,检查每行内容是否包含关键字,并统计匹配的文件数量。搜索结果会被写入一个新的txt文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 package com.sinsoft.fileSearch;2

3 import java.io.BufferedReader;4 import java.io.File;5 import java.io.FileFilter;6 import java.io.FileNotFoundException;7 import java.io.FileOutputStream;8 import java.io.FileReader;9 import java.io.IOException;10 import java.io.PrintStream;11 import java.util.ArrayList;12 import java.util.Date;13 import java.util.List;14 import java.util.Scanner;15

16 /**17 * @Created by wxk18 * @User: wxk19 * @Date: 2015-12-420 * @Time: 下午3:43:2621 */

22 public classTextSearchFile2 {23

24 static int countFiles = 0;//声明统计文件个数的变量

25 static int countFolders = 0;//声明统计文件夹的变量

26 static int count = 0;27

28 static StringBuffer sb = newStringBuffer();29

30 public static File[] searchFile(File folder, final String keyWord) {//递归查找包含关键字的文件

31

32 File[] subFolders = folder.listFiles(new FileFilter() {//运用内部匿名类获得文件

33 @Override34 public boolean accept(File pathname) {//实现FileFilter类的accept方法

35 if (pathname.isFile())//如果是文件

36 countFiles++;37 else

38 //如果是目录

39 countFolders++;40 if(pathname.isFile())41 readFileByLines(pathname, keyWord);42 return true;43

44 }45 });46

47 List result = new ArrayList();//声明一个集合

48 for (int i = 0; i < subFolders.length; i++) {49 //循环显示文件夹或文件

50 if(subFolders[i].isFile()) {51 //如果是文件则将文件添加到结果列表中

52 result.add(subFolders[i]);53 } else{54 //如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中

55 File[] foldResult =searchFile(subFolders[i], keyWord);56 for (int j = 0; j < foldResult.length; j++) {//循环显示文件

57 result.add(foldResult[j]);//文件保存到集合中

58 }59 }60 }61

62 File files[] = new File[result.size()];//声明文件数组,长度为集合的长度

63 result.toArray(files);//集合数组化

64 returnfiles;65 }66

67 /**68 * 以行为单位读取文件的内容69 *70 * @param fileName71 */

72 public staticBoolean readFileByLines(File file, String keyWord) {73 BufferedReader reader = null;74 try{75 //System.out.println("以行为单位读取文件内容,一次读一整行:");

76 reader = new BufferedReader(newFileReader(file));77 String tempString = null;78 int line = 1;79 //一次读入一行,直到读入null为文件结束

80 while ((tempString = reader.readLine()) != null) {81 //显示行号

82 if(tempString.toLowerCase().contains(keyWord.toLowerCase())) {83 sb.append("文件:" + file.getAbsolutePath() + "第" +line84 + "行: ——>" + tempString + "包含此关键字!");85 sb.append("\r\n");86 count++;87 }88 line++;89 }90 reader.close();91 } catch(IOException e) {92 e.printStackTrace();93 } finally{94 if (reader != null) {95 try{96 reader.close();97 } catch(IOException e1) {98 }99 }100 }101 if (count > 0) {102 return true;103 }104 return false;105 }106

107 //在文件里写入字符串

108 public static voidWriteStringToFile(StringBuffer sb) {109 Date date = newDate();110 long time =date.getTime();111 String fileString = "D:/log" + time + ".txt";112 try{113 File file = newFile(fileString);114 if (!file.exists()) {115 try{116 file.createNewFile();117 System.out.println("创建成功!");118 } catch(IOException e) {119 e.printStackTrace();120 System.out.println("创建失败!");121 }122 }123 PrintStream ps = new PrintStream(newFileOutputStream(file));124 //ps.println(sb);//往文件里写入字符串

125 ps.append(sb);//追加

126 } catch(FileNotFoundException e) {127 e.printStackTrace();128 }129 }130

131 public static void main(String[] args) {//java程序的主入口处

132 String fileName = "";133 String keyword = "";134 Scanner sc = new Scanner(System.in);135 System.out.print("请输入要搜索文件夹的路径:");136 fileName =sc.next();137 System.out.print("请输入要搜索的关键字:");138 keyword =sc.next();139

140 if ("".equals(fileName) || "".equals(keyword)) {141 System.out.println("路径或者关键字不能为空!");142 System.exit(0);143 }144

145 File folder = new File(fileName);//默认目录

146

147 if (!folder.exists()) {//如果文件夹不存在

148 sb.append("目录不存在:" +folder.getAbsolutePath());149 sb.append("\r\n");150 return;151 }152 File[] result = searchFile(folder, keyword);//调用方法获得文件数组

153 sb.append("在" + folder + "以及所有子文件时查找对象" +keyword);154 sb.append("\r\n");155 System.out.println("在" + folder + "以及所有子文件时查找对象" +keyword);156 for (int i = 0; i < result.length; i++) {//循环显示文件

157 File file =result[i];158 sb.append(file.getAbsolutePath() + " ");159 sb.append("\r\n");160 }161 sb.append("查找了" + countFolders + "个文件夹,共找到" + +countFiles + "个文件,"

162 + count + "个符合条件的内容");163 sb.append("\r\n");164 System.out.println(sb);165 WriteStringToFile(sb);166 }167 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值