/** *//**
* 在指定的文件名中查找对应的字符串,存在就将该文件名绝对路径打印出来
* @param fileName 文件名的绝对路径,String型
* @param srcStr 要查找的字符串,String型
*/
public void searchFile(String fileName,String srcStr){
FileInfo file= new file
try {
FileStream file= File.Open (fileName );
BufferedReader br=new BufferedReader(fr);
String strLine="";
while((strLine=br.readLine())!=null)
{
if(strLine.indexOf(srcStr)>0)
{
Console.Write (fileName);
break;
}
}
br.close();
fr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** *//**
* 在指定的绝对路径中查找指定的字符串
* @param path 绝对路径
* @param srcStr 要查找的字符串
*/
public void searchPath(String path,String srcStr)
{
File file=new File(path);
if(file.isDirectory())
{
File[] fileList=file.listFiles();
for(int i=0;i<fileList.length;i++)
{
if(fileList[i].isDirectory())//是目录就调用递归
{
searchPath(fileList[i].getAbsolutePath(),srcStr);
}
else
{
searchFile(fileList[i].getAbsolutePath(),srcStr);
}
}
}
else
{
searchFile(path,srcStr);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String path="H:\\xinkuaijizhunze\\src\\BIMIS";
String srcStr="11111";
SearchInJspFile s=new SearchInJspFile();
s.searchPath(path, srcStr);
Console.Write.println("执行完毕!");
}
这种功能的话,其实最好是用lucene.net了。但是不知道你的txt里面是怎么的构造,不知道怎么分词。lucene.net标准分词是以空格实现的。
不用lucene.net的话,也可以实现,就是楼上说的正则表达式,但是性能的话。。。。不敢恭维啊。
代码如下:
using System;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Answer
{
/// <summary>
/// 搜索存在匹配指定文本的文件类
/// </summary>
class TxtSearch
{
/// <summary>
/// 判断某个文件是否存在指定的内容
/// </summary>
/// <param name="fi">文件</param>
/// <param name="expression">指定内容</param>
/// <returns>判断结果</returns>
private static bool FileMatch(FileInfo fi,string expression)
{
StreamReader sr = fi.OpenText();
string fileContent;
while (!sr.EndOfStream)
{
fileContent = sr.ReadLine();
Regex CheckReg = new Regex(expression);
if (CheckReg.IsMatch(fileContent))
return true;
}
return false;
}
/// <summary>
/// 指定目录及其递归子目录下所有匹配的文件
/// </summary>
/// <param name="di">指定目录DirectoryInfo</param>
/// <param name="expression">指定内容</param>
/// <returns>文件列表</returns>
private static ArrayList AllFiles(DirectoryInfo di,string expression)
{
ArrayList Files = new ArrayList();
foreach (FileInfo fi in di.GetFiles("*.txt"))
{
if (FileMatch(fi, expression))
Files.Add(fi.Name);
}
foreach (DirectoryInfo diNode in di.GetDirectories())
Files.AddRange(AllFiles(diNode, expression));
return Files;
}
/// <summary>
/// 指定目录及其递归子目录下所有匹配的文件
/// </summary>
/// <param name="directoryPath">指定的目录的限定路径</param>
/// <param name="expression">指定内容</param>
/// <returns>文件列表</returns>
public static ArrayList AllFilesMatched(string directoryPath, string expression)
{
DirectoryInfo di = new DirectoryInfo(directoryPath);
return AllFiles(di, expression);
}
/// <summary>
/// 单层指定目录(不递归)下所有匹配的文件
/// </summary>
/// <param name="di">指定的目录DirectoryInfo</param>
/// <param name="expression">指定内容</param>
/// <returns>文件列表</returns>
private static ArrayList DirectoryFiles(DirectoryInfo di, string expression)
{
ArrayList Files = new ArrayList();
foreach (FileInfo fi in di.GetFiles("*.txt"))
{
if (FileMatch(fi, expression))
Files.Add(fi.Name);
}
return Files;
}
/// <summary>
/// 单层指定目录(不递归)下所有匹配的文件
/// </summary>
/// <param name="directoryPath">指定的目录的限定路径</param>
/// <param name="expression">指定内容</param>
/// <returns>文件列表</returns>
public static ArrayList DirectoryFilesMatched(string directoryPath, string expression)
{
DirectoryInfo di = new DirectoryInfo(directoryPath);
return DirectoryFiles(di, expression);
}
}
}