A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马—王宁 中级黑马   /  2012-4-18 22:53  /  1798 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FilenameFilter的方法?以及这个接口中的方法具体怎么使用?详解,谢谢

2 个回复

倒序浏览
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();

    }



  }  

}
回复 使用道具 举报
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;
  }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马