在Java中使用星号和问号来匹配文件名

问题描述

| 我想用Java这样写:
public class MyMatcher 
{
   public static boolean isMatching(String filename,String param) { 
      ...
   }
}
filename将是没有目录的文件名称 (例如:readme.txt,shares.csv,一首好听的Song.mp3,...) param类似于\“ *。mp3 \”,表示所有以.mp3结尾的文件,依此类推。 注意:param不是正则表达式语句,更像是在textpad或eclipse甚至dos dir上搜索文件的通常方式。 有人可以建议如何做到这一点,或者是否有一些开源库可以做到这一点?     

解决方法

Apache Commons IO有一个WilcardFileFilter:   通配符匹配器使用字符\'?\'和\'* \'表示单个或多个通配符。 来自javadoc的示例:
File dir = new File(\".\");
FileFilter fileFilter = new WildcardFileFilter(\"*test*.java~*~\");
File[] files = dir.listFiles(fileFilter);
for (int i = 0; i < files.length; i++) {
  System.out.println(files[i]);
}
    ,
String pattern = param.replaceAll (\"\\\\*\",\".*\").replaceAll (\"\\\\?\",\".\");
return filename.matches (pattern);