【IO流】05 - file类中的方法 - 过滤器

先写过滤器 implements FilenameFilter,用于过滤指定扩展名的文件


package cn.itcast.io.b.filter;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 用于过滤指定扩展名的文件。
 * @author Teaching
 *
 */
public class FilenameFilterBySuffix implements FilenameFilter {

	private String suffix;
	
	public FilenameFilterBySuffix(String suffix) {
		super();
		this.suffix = suffix;
	}

	@Override
	public boolean accept(File dir, String name) {
		
		
		return name.endsWith(suffix);
	}

}



package cn.itcast.io.a.file;

import java.io.File;

import cn.itcast.io.b.filter.FilenameFilterBySuffix;

public class FileMethodDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/*
		 * 需求2:获取目录中的内容,但是只要.java文件。
		 */
		File dir = new File("E:\\Java_Code\\day06");

		File[] files = dir.listFiles(new FilenameFilterBySuffix(".JPG"));// 需要传递一个文件名过滤器 FilenameFilter对象。
		
		/*listFiles源码解析。
		public File[] listFiles(FilenameFilter filter) {//FilenameFilter filter = new FilenameFilterByJava()
	        String ss[] = list();//调用了File类中的list()获取到所有的名称数组 ss。
	        if (ss == null) return null;//健壮性判断,如果数组为null,就返回。
	        ArrayList files = new ArrayList<>();//创建一个集合。元素是File类型。
	        for (String s : ss)//遍历名称数组。
	            if ((filter == null) || filter.accept(this, s))//对遍历的名称进行过滤器的判断。将 当前目录this,遍历到名称s传递给accept方法。
	            			//一旦条件满足过滤器的过滤条件。
	                files.add(new File(s, this));//将满足过滤条件添加到集合中。添加是 将文件名称和当前目录封装成File对象。new File(dir,name);
	                
	        return files.toArray(new File[files.size()]);//将集合转成数组返回,为啥呢?不需要增删操作。
	    }
		*/
		
		
		for (File file : files) {
			//if(file.getName().endsWith(".jpg")){
			System.out.println(file.getName());
		}
	}

}

【IO流】05 - file类中的方法 - 过滤器_第1张图片


你可能感兴趣的:(JAVA,SE)