Java 通配符匹配查找文件

来源:互联网 发布:linux 修改账户密码 编辑:程序博客网 时间:2024/05/17 09:19

=============================

字符串匹配例子

     String s = "*txt.*";
      s = s.replace('.', '#');
      s = s.replaceAll("#", "////.");
      s = s.replace('*', '#');
      s = s.replaceAll("#", ".*");
      s = s.replace('?', '#');
      s = s.replaceAll("#", ".?");
      s = "^" + s + "$";
    
      System.out.println(s);
      Pattern p = Pattern.compile(s);
    
      ArrayList list = new ArrayList();
      list.add("aabc.txt");
      list.add("sdfsdfaabc.txt.asdasd");
      list.add("aabcd.txt");
      list.add("aabcdtxt.sadf");
      list.add("abc.txt");
    
      Matcher fMatcher = null;
      String s1 = null;
      int size = list.size();
      for(int i=0;i<size;i++)
      {
        s1 = (String)list.get(i);
        fMatcher = p.matcher(s1);
        if(fMatcher.matches())
        {
          System.out.println(s1);
        }
      }

===========================================

实用的模糊(通配符)文件查找程序

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;

/**
* <p>Title: FileService </p>
* <p>Description: 获取文件 </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class FileService {
   public FileService() {
   }

   /**
    * 在本文件夹下查找
    * @param s String 文件名
    * @return File[] 找到的文件
    */
   public static File[] getFiles(String s)
   {
     return getFiles("./",s);
   }
  
   /**
    * 获取文件
    * 可以根据正则表达式查找
    * @param dir String 文件夹名称
    * @param s String 查找文件名,可带*.?进行模糊查询
    * @return File[] 找到的文件
    */
   public static File[] getFiles(String dir,String s) {
     //开始的文件夹
     File file = new File(dir);

     s = s.replace('.', '#');
     s = s.replaceAll("#", "////.");
     s = s.replace('*', '#');
     s = s.replaceAll("#", ".*");
     s = s.replace('?', '#');
     s = s.replaceAll("#", ".?");
     s = "^" + s + "$";

     System.out.println(s);
     Pattern p = Pattern.compile(s);
     ArrayList list = filePattern(file, p);

     File[] rtn = new File[list.size()];
     list.toArray(rtn);
     return rtn;
   }

   /**
    * @param file File 起始文件夹
    * @param p Pattern 匹配类型
    * @return ArrayList 其文件夹下的文件夹
    */

   private static ArrayList filePattern(File file, Pattern p) {
     if (file == null) {
       return null;
     }
     else if (file.isFile()) {
       Matcher fMatcher = p.matcher(file.getName());
       if (fMatcher.matches()) {
         ArrayList list = new ArrayList();
         list.add(file);
         return list;
       }
     }
     else if (file.isDirectory()) {
       File[] files = file.listFiles();
       if (files != null && files.length > 0) {
         ArrayList list = new ArrayList();
         for (int i = 0; i < files.length; i++) {
           ArrayList rlist = filePattern(files[i], p);
           if (rlist != null) {
             list.addAll(rlist);
           }
         }
         return list;
       }
     }
     return null;
   }

   /**
    * 测试
    * @param args String[]
    */
   public static void main(String[] args) {
   }
}

  
原创粉丝点击