FilenameFilter

FilenameFilter顾名思义,就是通过名字来过滤掉一些文件。

这个接口很简单, 不用多解释, 就只有一个accept方法:
boolean accept(File dir, String name);


那来看看第一种实现 - 创建一个实现类
public class ForFun {
	public static void main(String[] args) {
		File path = new File(".");
		String[] nameList = path.list(new DirFilter(".class"));
		for (String name : nameList) {
			System.out.println(name);
		}
	}

	static class DirFilter implements FilenameFilter {

		private String filter;

		public DirFilter(String filter) {
			this.filter = filter;
		}

		@Override
		public boolean accept(File dir, String name) {
			String f = new File(name).getName();
			return f.indexOf(filter) != -1;
		}

	}
}


意图很明确, 就是要打印出当前目录下面含有".class"的所有文件。

第二种实现, 使用匿名类
public class ForFun {
	public static void main(String[] args) {
		File path = new File(".");

		String[] nameList = path.list(filter(".class"));
		for (String name : nameList) {
			System.out.println(name);
		}
	}

	public static FilenameFilter filter(final String filterName) {
		return new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				String f = new File(name).getName();
				return f.indexOf(filterName) != -1;
			}
		};
	}
}


好, 这样也是没问题的。 接下来更简短, 但个人觉得没必要, 程序的可读性不好
public class ForFun {
	public static void main(String[] args) {
		File path = new File(".");
		String[] nameList = path.list(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				String f = new File(name).getName();
				return f.indexOf(".class") != -1;
			}
		});
		for (String name : nameList) {
			System.out.println(name);
		}
	}
}

你可能感兴趣的:(java,编程,FilenameFilter,匿名类)