import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 文件夹过滤
* @author cnm
* @date 2012-09-06
*
*/
@SuppressWarnings({"unchecked","rawtypes"})
public class FilesFilter {
// 用于缓存文件列表
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;
}
}
}
/**
* 分析文件名并加入files
*
* @param input
*/
public ArrayList getFile(String path, String regexp) {
// 目录
_path = path;
_regexp = regexp;
File directory = new File(_path);
File[] filesFile = directory.listFiles(new MyFileFilter());
if (filesFile == null)
return null;
for (int j = 0; j < filesFile.length; j++) {
if(filesFile[j].isDirectory())
{
//递归获取子目录中符合条件的文件
getFile(filesFile[j].getAbsolutePath()+"//",_regexp);
}
else
{
files.add(filesFile[j]);
}
}
return files;
}
/**
* 获取符合条件的文件名集合
* @param path
* @param regexp
* @return
*/
public String [] getFileNames(String path, String regexp) {
// 目录
_path = path;
_regexp = regexp;
File directory = new File(_path);
String[] filesFile = directory.list(new MyFilenameFilter());
return filesFile;
}
public static void main(String[] args) {
FilesFilter fa = new FilesFilter();
//过滤e盘中已jar和zip为扩展名的文件
// String [] filesFile = fa.getFileNames("E:", "^Z_CAWN_I_\\d{5}_2012062620[0-9a-zA-z_-]+\\.(TXT|txt|BZ2|bz2)$");
String [] filesFile = fa.getFileNames("E:", "");
System.out.println("length ==== " + filesFile.length);
for (String s : filesFile) {
System.out.println(s);
}
}
}