import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FilesFilter { // 用于缓存文件列表 @SuppressWarnings("unchecked") private ArrayList files = new ArrayList(); // 用于承载文件路径 private String _path; // 用于承载未合并的正则公式 private String _regexp; // 文件过滤器 class MyFileFilter implements FileFilter { public boolean accept(File file) { try { Pattern pattern = Pattern.compile(_regexp); // 文件夹不过滤掉 if (file.isDirectory()) return true; Matcher match = pattern.matcher(file.getName()); return match.find(); } catch (Exception e) { return false; } } } // 文件名过滤器 class MyFilenameFilter implements FilenameFilter { public boolean accept(File dir, String name) { try { Pattern pattern = Pattern.compile(_regexp); File file = new File(dir.getPath() + name); // 文件夹过滤掉 if (file.isDirectory()) return false; return pattern.matcher(name).find(); } catch (Exception e) { return false; } } } FilesFilter() { } /** * 分析文件名并加入files * * @param input */ @SuppressWarnings("unchecked") private void getFile(String path, String regexp) { // 目录 _path = path; _regexp = regexp; File directory = new File(_path); File[] filesFile = directory.listFiles(new MyFileFilter()); if (filesFile == null) return; for (int j = 0; j < filesFile.length; j++) { if(filesFile[j].isDirectory()) { //递归获取子目录中符合条件的文件 getFile(filesFile[j].getAbsolutePath()+"//",_regexp); } else { files.add(filesFile[j]); System.out.println(filesFile[j].getPath()+filesFile[j].getName()); } } return; } private void getFileNames(String path, String regexp) { // 目录 _path = path; _regexp = regexp; File directory = new File(_path); String[] filesFile = directory.list(new MyFilenameFilter()); for (String s : filesFile) { System.out.println(s); } } public static void main(String[] args) { FilesFilter fa = new FilesFilter(); //过滤e盘中已jar和zip为扩展名的文件 fa.getFileNames("E:", "[//s//S]*.(sql)$"); System.out.println("----------------------------------"); fa.getFile("E:", "[//s//S]*.(sql)$"); } }