现在还不知道叫什么

在看File.listFiles的方法时,得到一个设计模式,现在还不知道叫什么

这个方法的思想是返回过滤后的文件列表,而过滤方法由用户自由规定

大体思路是:定义一个接口,用来实现过滤

                      listFiles方法接收这个接口的实例,并调用接口中的方法实现过滤

接口代码

package java.io;

public interface FileFilter {

    boolean accept(File pathname);

}

 File.listFiles方法代码

  public File[] listFiles(FileFilter filter) {
	String ss[] = list();
	if (ss == null) return null;
	ArrayList v = new ArrayList();
	for (int i = 0 ; i < ss.length ; i++) {
	    File f = new File(ss[i], this);
	    if ((filter == null) || filter.accept(f)) {
		v.add(f);
	    }
	}
	return (File[])(v.toArray(new File[v.size()]));
    }

 实现类调用时使用的接品实现类(这部分由用户实现)

public class LogFileFilter implements FileFilter {

	/**
	 * 必须是以.gz或.log结尾,并且文件名匹配目前的9种日志文件
	 */
	@Override
	public boolean accept(File file) {
		String fileName = file.getName();
		if (fileName.matches(Constants.PATTERN_MBSERVICE_LOG)) {
			return true;
		} else if (fileName.matches(Constants.PATTERN_SERVICE_LOG)) {
			return true;
		} else if (fileName.toLowerCase().endsWith(".tmp")
				|| fileName.toLowerCase().endsWith(".temp")
				|| fileName.toLowerCase().endsWith(".part")) {
			return false;
		}
		// 都不符合的文件处理
		FileUtils.moveFile(file, new File(Constants.LOG_ERROR_DIR + "/"
				+ Constants.DEVICE));
		return false;
	}
}

 调用得到符合条件的文件

File[] files = srcDir.listFiles(new LogFileFilter());

 

 

你可能感兴趣的:(现在还不知道叫什么)