import java.util.regex.*;
import java.io.*;
import java.util.*;
public class DirList{
public static void main(String[] args){
File path=new File(".");
String[] list1;
if(args.length==0)
list1=path.list();
else
list1=path.list(new DirFilter(args[0]));

Arrays.sort(list1,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list1)
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();//这个name是怎么传进来的?

}

}

解决方案 »

  1.   

    这个name是由java.io.File类传进来的,你可以打开File类的list方法的源码看一下。
      

  2.   

    值传递就是用到这个accept方法的时候传进去就行了  ,不是从方法里面获取来的,和那个arg【0】没关系。
      

  3.   

    public boolean accept(File dir,String name){
            return pattern.matcher(name).matches();//这个name是怎么传进来的?    
            
        }
    这两个name是一样的
      

  4.   

    java.io.File类
    public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    ArrayList v = new ArrayList();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
    v.add(names[i]);
        }
    }
    return (String[])(v.toArray(new String[v.size()]));
        }
      

  5.   

    public boolean accept(File dir,String name){
            return pattern.matcher(name).matches();//这个name是怎么传进来的?    
            
        }方法定义name  方法里面用