文件夹过滤

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);
		}
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值