File类-目录列表器

在充分了解java I/O系统以便于正确运用之前,我们需要学习相当数量的类。另外,很有必要理解I/O类库的演化过程,即使我们的第一反应是“不要用历时打扰我,只需要告诉我怎么用”。问题是,如果缺乏历史的眼光,很快我们就会对什么时候该使用哪些类,以及什么时候不该使用它们而感到迷惑。


File类


File(文件)类这个名字,它即能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。如果它指的是一个文件集,我们就可以对此集合调用list()方法,这个方法返回一个字符串数组。 实际上,有过敲代码经验的,FilePath(文件路径) 对File这个类来说是个更好的名字。



目录列表器


想查看一个目录列表,我们有两种方法来使用File对象。

1、 如果我们调用不带参数的list()方法,可以获得此File对象包含的全部列表。

2、如果我们想获得一个受限列表,例如:想得到所有扩展名为.java的文件,那么我们就要用到“目录过滤器”

public class DirList
{
	public static void main(String[] args)
	{
		File path=new File("D:\\logs");//路径
		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)
	{
		this.pattern=Pattern.compile(regex);
	}

	@Override
	public boolean accept(File dir, String name)
	{
		return pattern.matcher(name).matches();
	}
	
}

创建DirFilter这个类的目的在于实现accpet()方法,并把这个方法提供给list()方法使用,使list可以回调accept(),进而决定哪些文件包含在列表中。 这种结构常常称为回调。这是一个策略模式的例子,因为list实现了基本的功能,而且按照FilenameFilter的形式提供了这个策略,以便完善list()在提供服务时所需的算法。

accept()方法必须接收一个代表某个特定文件所在的目录的File对象,以及包含了那个文件名.   记住:list()方法会为此目录对象下的每一个文件名调用accept(),来判断该文件是否包含在内,判断结果用布尔值表示。

accept()会使用一个正则表达式的matcher对象,来查看此正则表达式regex是否匹配这个文件名字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值