FilenameFilter来打印File下的所有java文件名

在main中给定一个目录,在其下寻找满足以java作为后缀的文件名,并输出。

import java.io.*;
import java.util.*;

public class DirList
{
 public static void main(String[] args)
 {
  File path=new File("E://Test");  //指定目录
  String[] lst;
  
  lst=path.list(new DirFilter()); //重点,看下边的解释
  Arrays.sort(lst);
  for(int i=0;i<lst.length;i++)
   System.out.println(lst[i]);
  
 }
}
class DirFilter implements FilenameFilter
{
 public boolean isJavaFile(String fn)
 {
  if(fn.toLowerCase().endsWith("java")) return true;
  return false;
 }
 public DirFilter(){}
 public boolean accept(File dir,String name)
 {
  return isJavaFile(name);
 }
}

解释:
  File的list方法参数引入了一个文件名过滤类FilenameFilter。
  如果给定的filter为空,则该目录下的所有文件名都符合要求。否则,只有使得FilenameFilter.accept()方法返回true的文件名才算符合条件。
  对于每一个指定目录下的文件名,自动都会传到FilenameFilter类的accept方法,以此判断是否满足过滤器条件,最后这些满足过滤器条件的文件名以string数组返回。
下边给出File.list()方法的源码,以便清楚这个机制是怎么执行的。

public String[] list(FilenameFilter filter) {
    String names[] = list();  //list()是File.list(),用来获取File下一级的所有文件名
    if ((names == null) || (filter == null)) {
        return names;
    }
    ArrayList v = new ArrayList();
    for (int i = 0 ; i < names.length ; i++) {
   //在这里把filter的accept隐藏了,在用户看来就是自动执行的
        if (filter.accept(this, names[i])) {
        v.add(names[i]);
        }
    }
    return (String[])(v.toArray(new String[0]));
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值