采用WINDOWS的内容查找,居然只支持文本文件,不支持如JSP等文件。那就自己写一个吧,感觉还可以,将所以包含查找字符串的全路径都打印出来,这样就能够一目了然了。源程序如 下:
import
java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class SearchInJspFile ... {
/** *//**
* 在指定的文件名中查找对应的字符串,存在就将该文件名绝对路径打印出来
* @param fileName 文件名的绝对路径,String型
* @param srcStr 要查找的字符串,String型
*/
public void searchFile(String fileName,String srcStr)
...{
File file=new File(fileName);
try ...{
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
String strLine="";
while((strLine=br.readLine())!=null)
...{
if(strLine.indexOf(srcStr)>0)
...{
System.out.println(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="<iframe name="pubinfo"";
SearchInJspFile s=new SearchInJspFile();
s.searchPath(path, srcStr);
System.out.println("执行完毕!");
}
}
import java.io.File;
import java.io.FileReader;
public class SearchInJspFile ... {
/** *//**
* 在指定的文件名中查找对应的字符串,存在就将该文件名绝对路径打印出来
* @param fileName 文件名的绝对路径,String型
* @param srcStr 要查找的字符串,String型
*/
public void searchFile(String fileName,String srcStr)
...{
File file=new File(fileName);
try ...{
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
String strLine="";
while((strLine=br.readLine())!=null)
...{
if(strLine.indexOf(srcStr)>0)
...{
System.out.println(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="<iframe name="pubinfo"";
SearchInJspFile s=new SearchInJspFile();
s.searchPath(path, srcStr);
System.out.println("执行完毕!");
}
}
这个改进了一下,可以在一个文件中查找多个字符串,只有当多个字符串都存在于同一个文件中时,查找条件成立,打印查找到的文件名及路径。
import
java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class SearchStrInPath ... {
ArrayList listCondition = new ArrayList();// 存放条件的列表
int conditionNum;// 查找的条件个数
String fileTypeExtendsName = "";// 在指定的扩展名文件中查找,例如:.xml,不指定就在全部的文件中查找,包括二进制文件
/** *//**
* 取得总条件的个数
*
* @return
*/
private int getConditionNum() ...{
return listCondition.size();
}
/** *//**
* 增加需要查找的字符串,所有增加的字符串在查找的文件中都找到返加该文件名
* @param str
*/
private void addCondition(String str) ...{
listCondition.add(str);
}
/** *//**
* 在给定的文件中查找
* @param fileName 文件名
*/
public void searchFile(String fileName) ...{
File file = new File(fileName);
boolean isTrue = false;
try ...{
String strLine = "";
for (int i = 0; i < conditionNum; i++) ...{
FileReader fr = new FileReader(file);
BufferedReader br = null;
br = new BufferedReader(fr);
String condition = listCondition.get(i).toString();
isTrue = false;
while ((strLine = br.readLine()) != null) ...{
if (strLine.indexOf(condition) > 0) ...{
isTrue = true;
break;
}
}
br.close();
fr.close();
if (!isTrue) ...{
i = conditionNum;// 结束
}
}
if (isTrue) ...{
System.out.println(fileName);
}
} catch (Exception e) ...{
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
/** *//**
* 在指定的绝对路径中查找指定的字符串
*
* @param path
* 绝对路径
* @param srcStr
* 要查找的字符串
*/
public void searchPath(String path) ...{
conditionNum = getConditionNum();
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());
} else ...{
// 下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if (fileTypeExtendsName == ""
|| fileList[i].getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(fileList[i].getAbsolutePath());
}
}
} else ...{
// 下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if (fileTypeExtendsName == ""
|| file.getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(file.getAbsolutePath());
}
}
// 一个示例
public static void main(String[] args) ...{
// TODO Auto-generated method stub
SearchStrInPath s = new SearchStrInPath();
String path = "D:/work/BIMIS/bfms/web/WEB-INF/config/operation/bfms";
s.addCondition("IvtBaseInfoFind");
//s.addCondition("xml");//可增加多个字符串同时查找
//s.addCondition("gb2312");
s.searchPath(path);
System.out.println("执行完毕!");
}
}
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class SearchStrInPath ... {
ArrayList listCondition = new ArrayList();// 存放条件的列表
int conditionNum;// 查找的条件个数
String fileTypeExtendsName = "";// 在指定的扩展名文件中查找,例如:.xml,不指定就在全部的文件中查找,包括二进制文件
/** *//**
* 取得总条件的个数
*
* @return
*/
private int getConditionNum() ...{
return listCondition.size();
}
/** *//**
* 增加需要查找的字符串,所有增加的字符串在查找的文件中都找到返加该文件名
* @param str
*/
private void addCondition(String str) ...{
listCondition.add(str);
}
/** *//**
* 在给定的文件中查找
* @param fileName 文件名
*/
public void searchFile(String fileName) ...{
File file = new File(fileName);
boolean isTrue = false;
try ...{
String strLine = "";
for (int i = 0; i < conditionNum; i++) ...{
FileReader fr = new FileReader(file);
BufferedReader br = null;
br = new BufferedReader(fr);
String condition = listCondition.get(i).toString();
isTrue = false;
while ((strLine = br.readLine()) != null) ...{
if (strLine.indexOf(condition) > 0) ...{
isTrue = true;
break;
}
}
br.close();
fr.close();
if (!isTrue) ...{
i = conditionNum;// 结束
}
}
if (isTrue) ...{
System.out.println(fileName);
}
} catch (Exception e) ...{
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
/** *//**
* 在指定的绝对路径中查找指定的字符串
*
* @param path
* 绝对路径
* @param srcStr
* 要查找的字符串
*/
public void searchPath(String path) ...{
conditionNum = getConditionNum();
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());
} else ...{
// 下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if (fileTypeExtendsName == ""
|| fileList[i].getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(fileList[i].getAbsolutePath());
}
}
} else ...{
// 下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if (fileTypeExtendsName == ""
|| file.getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(file.getAbsolutePath());
}
}
// 一个示例
public static void main(String[] args) ...{
// TODO Auto-generated method stub
SearchStrInPath s = new SearchStrInPath();
String path = "D:/work/BIMIS/bfms/web/WEB-INF/config/operation/bfms";
s.addCondition("IvtBaseInfoFind");
//s.addCondition("xml");//可增加多个字符串同时查找
//s.addCondition("gb2312");
s.searchPath(path);
System.out.println("执行完毕!");
}
}
本文出自:冯立彬的博客