您的位置:首页 > 其它

按正则表达式过滤符合条件的文件或文件夹的工具类

2011-01-26 15:26 525 查看
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)$"); 
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐