Java -IO

来源:互联网 发布:什么是网络消费贷款 编辑:程序博客网 时间:2024/06/05 23:49

目录列表–DirFilter这个类存在的唯一原因就是将accept()方法。创建这个类的目的在于把accept()方法提供给list()使用,使list()可以回调accept(),进而决定那些文件包含在列表中。

package cn.io;import java.io.File;import java.io.FilenameFilter;import java.util.Arrays;import java.util.regex.Pattern;public class DirList {    public static void main(String[] args) {        File path = new File(".");        String [] list;        if(args.length == 0)            list = path.list();        else            list = path.list(new DirFilter(args[0]));        Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);        for(String dirItem:list)            System.out.println(dirItem);    }}class DirFilter implements FilenameFilter{    private Pattern pattern;    public DirFilter(String regex){        pattern =Pattern.compile(regex);    }    public boolean accept(File dir,String name){        return pattern.matcher(name).matches();    }}

这里写图片描述

匿名—注意,传向filter()的参数必须未final。这在匿名内部类中是必须的,这样它才能够使用来自
该类范围之外的对象。

package cn.io;import java.io.File;import java.io.FilenameFilter;import java.util.Arrays;import java.util.regex.Pattern;public class DIrList2 {    public static FilenameFilter filter(final String regex){        return new FilenameFilter(){            private Pattern pattern = Pattern.compile(regex);            public boolean accept(File dir,String name){                return pattern.matcher(name).matches();            }        };//End of anonymous inner class(匿名内部类)    }    public static void main(String[] args) {        File path = new File(".");        String [] list;        if(args.length == 0)            list = path.list();        else            list = path.list(filter(args[0]));        Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);        for(String dirItem:list)            System.out.println(dirItem);    }}

优化–定义一个作为list()参数的匿名内部类

public class DirList3 {    public static void main(final String[] args) {        File path = new File(".");        String [] list;        if(args.length == 0)            list =path.list();        else            list = path.list(new FilenameFilter() {                private Pattern pattern = Pattern.compile(args [0]);                public boolean accept(File dir,String name){                    return pattern.matcher(name).matches();                }        });        Arrays.sort(list ,String.CASE_INSENSITIVE_ORDER);        for(String dirItem:list)            System.out.println(dirItem);    }}
原创粉丝点击