黑马程序员技术交流社区

标题: FilenameFilter [打印本页]

作者: 黑马—王宁    时间: 2012-4-18 22:53
标题: FilenameFilter
FilenameFilter的方法?以及这个接口中的方法具体怎么使用?详解,谢谢
作者: liuyang    时间: 2012-4-18 23:03
FilenameFilter接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法

public class DirFilter implements FilenameFilter{

  private String type;

  public DirFilter(String tp){

    this.type=tp;

  }



  public boolean accept(File fl,String path) throws Exception{

     File file=new File(path);

     String filename=file.getName();

     return filename.indexOf(type)!=-1;

  }

}



具体应用方法:File假如是一个Directory,可以通过list()方法得到这个目录下所有的文件和目录的名称数组,list()方法,一种是没有参数,一种是实现FilenameFilter接口的参数,例如要获得一个指定目录下的所有的java文件,就要使用第二种带参数的list()方法



public class Test{

  public static void main(String[] args){

    try{

      //指定目录(“.”表示当前目录)

      File dir=new File(".");

      String[] names;

      //获得所有java文件

      DirFilter filter=new DirFilter(".java");

      names=dir.list(filter);

      //打印所有java文件名称

      for(int i=0;i<names.length;i++){

        System.out.println("i:"+i+" name:"+names[i]);

      }

    }catch(Exception e){

      e.printStackTrace();

    }

  }

}



其中这里还可以将DirFilter类作为Test的一个匿名内部类来实现,例如:

public class Test{

  //type:必须声明为final类型,作为一个匿名内部类,访问的变量都必须声明为final类型

  public static FilenameFilter filter(final String type) throws Exception{

    return new FilenameFilter(){

      public boolean accept(File file,Stirng path){

        String filename=new File(path).getName();

        return filename.indexOf(type)!=-1;

        } 

      };   

  }



  public static void main(String[] args){

    try{    

      File file=new File(".");

      String names[];

      names=file.list(filter(".java");

      for(int i=0;i<names.length;i++){

        System.out.println("i:"+i+" filename:"+names[i]);

      }

    catch(Exception e){

      e.printStackTrace();

    }



  }  

}
作者: 周海诚    时间: 2012-4-29 16:46
File类和FilenameFilter接口的使用方法:

import java.io.*;

File f=new File(".");//File类实例,相对于当前目录

String [] filelist=f.list(new Myfilefilter());//返回当前f代表的目录下的文件和目录名称列表(不含路径),Myfilefilter()是用以过滤文件的类。他必须实现FilenameFilter接口;

class Myfilefilter implements FilenameFilter
{

public Myfilefilter()
{
  System.out.println("Myfilefilter now construct");
  
}
public boolean accept(File f,String s)//File.List方法会为每个文件/子目录调用accept方法,参数s将传入文件路径全名
{
  String currentFilename=new File(s).getName();//只得到文件名/目录名
  if(currentFilename.equals("a.txt")==true||currentFilename.equals("新建文件夹"))//过滤条件
  {
   System.out.println("hahahaha");
   return true;//返回true,则保留在结果中
  }
  else
  {
   return false;
  }
}
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2