实现该功能的为Read类,list为成员变量,存放需要查找的特定字符创,包括四个方法:
1.String[] getFiles(File f)
功能为获取特定目录下的所有文件。当然前提是你传入的File类型是个目录。编写代码不难!
2.String findAllFile(String [] files)
功能为传入‘1’方法的返回结果,根据你自己的需求查找特定的文件名(比如我要在以“abc”开头的文件中查找,则可以用正则表达式来过滤,过滤完,看你怎么处理了,可以将结果存入一个list中,也可以循环调用,而我的处理时后一种,即调用‘3’)
3.String findOneFile(File f)
功能在传入的文件中查找特定字符串集。该方法的代码如下:
public String findOneFile(File f){
StringBuffer record = new StringBuffer();
if(f.isDirectory()){
return null;
}
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String pline = br.readLine();
while(pline != null){
String onefile = findAll***(pline,f);
if(onefile.trim() != null)
if(record.toString().indexOf(onefile) == -1)
record.append(onefile);
pline = br.readLine();
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException e1){
e1.printStackTrace();
}
return record.toString() ;
}
4.String findAll***(String pline,File f)
功能就是查找文件中某一行,是否具有特定字符串集。具体代码如下:
public String findAll***(String pline,File f){
//int flag = 0 ;
StringBuffer sb =new StringBuffer();
for(int i=0 ; i < list.size(); i++){
int j = pline.indexOf(list.get(i).trim());
if(j>-1){
sb.append("what you find?---> "+list.get(i).trim()+"\t"+f.getName()+"\t\n") ;
}
continue ;
}
return sb.toString();
}
基本结构就是这样的,不知有没有说清楚呢?说说基本流程吧,程序的运行开始当然是main函数了,创建一个类实例,然后创建一个File类,该类指向的就是你要查询的目录,我还创建了一个File类,用来存放查询结果。
首先,调用‘1’方法,获取一个该目录下的"文件名"的字符串集;然后调用‘2’方法,并返回Sting类型的结果;最后创建一个文件输出流,将结果放入文件中。程序运行完毕!
注意:文件的分隔符(采用windows和linux通用的:file.separator)其他的也没什么了,就是for循环了,然后就是结果怎么保存下来,还是直接显示啦!
程序代码:
public class Read {
public static final List<String> list = new ArrayList<String>(Arrays.asList( 字符串集 ... ));
public String[] getFiles(File f){
if(f.isDirectory()){
return f.list();
}
return null;
}
public String findAllFile(String [] files){
StringBuffer result = new StringBuffer();
for(int i=0 ; i<files.length ; i++)
{
if(files[i].matches("abc*")){
File nowFile = new File("log"+System.getProperty("file.separator")+files[i]);
String allfile = findOneFile(nowFile);
if(allfile.trim() != null)
result.append(allfile);
}
}
return result.toString();
}
public String findOneFile(File f){
StringBuffer record = new StringBuffer();
if(f.isDirectory()){
return null;
}
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String pline = br.readLine();
while(pline != null){
String onefile = findAll***(pline,f);
if(onefile.trim() != null)
if(record.toString().indexOf(onefile) == -1)
record.append(onefile);
pline = br.readLine();
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException e1){
e1.printStackTrace();
}
return record.toString() ;
}
public String findAll***(String pline,File f){
//int flag = 0 ;
StringBuffer sb =new StringBuffer();
for(int i=0 ; i < list.size(); i++){
int j = pline.indexOf(list.get(i).trim());
if(j>-1){
sb.append("what you find?---> "+list.get(i).trim()+"\t"+f.getName()+"\t\n") ;
}
continue ;
}
return sb.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Read read = new Read();
File directory =new File("目录名");
File result = new File("result.txt");
String resultString = null;
String[] files=read.getFiles(directory);
if(files != null)
resultString = read.findAllFile(files);
try{
BufferedWriter bw = new BufferedWriter(new FileWriter(result,false));
bw.write(resultString);
bw.flush();
bw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}