java实现在指定目录下的特定文件中查找特定字符串集

基本结构吧,如图:

java实现在指定目录下的特定文件中查找特定字符串集

       实现该功能的为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();   
  }

 }

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值