创建满足特定条件名的文件过滤类

  做实习到现在快两年了,一只没弄清。明天研究一下,先记个问题在这。

  翻阅Thinking in java,第十八章中记载,根据其记载所翻译。

 现在有很多不同的I/o系统,正说明了创建一个好的I/O系统是一项艰难的任务。挑战来源于涵盖所有可能性:存在I/O源端和与之通信的接收端(文件,控制台,网络连接),还要以多种方式与他们通信(顺序,随机存储,缓冲,二进制按字符,按行,按字)。

 在学习I/O系统之前,我们必须学相当多的类。

2.File类,处理文件目录。

3.File类除了代表一个特定文件,还代表一个目录下的一组文件。调用list()返回目录下的文件集。

4.FileNameFilter接口,实现里面的accept方法以区分不同的文件类型。

5.使用java.util.Arrays.sort(数组,String.CASE_INSENSITIVE_ORDER)方法排序,按字母排序。 list()会对文件目录下的每个对象调用accept,判断其是否包含在内。

目录实用工具:(在文件集上执行操作)下面一个实用工具类通过local()产生本地文件构成的File对象数组,使用walk产生的List<File>

//工具类名称

class Directory{

//如果只是需要返回需要的file数组对象

local(String name,String regex){

 return local(new File(nam),regex);

}

  public static file[] local(File file,String regex){

return file.listFiles(new FileNameFilter(){

  private Pattern pattern = Pattern.compile{regex];

 public boolean accept(File dir Striing name){

return pattern.matcher(new File(name).matches());

}



});

}

//实现iterable<?>接口必须要实现iterator(),返回iterator对象。

static classs TreeInfo impleents Iterable<File>{

public ArrayList<File >dirFiles = new ArrayList<File>();

ArrayList<File> lists = new ArrayList<File>(); 

iterator<File> iterator(){

//ArrayList已经实现了iterator的接口,并实现了next()和hasNext()。采用代理模式,A类中返回B类方法。

return lists.itorator()}

}

//if 是目录,采用这个方法。  

//参数是treeInfo本身,将目录下的文件放入上层文件。

public void addAll(treeInfo other){

dirFiles.addAll(other.dirFiles;)

lists.addAll(other.lists);

}


//返回TreeInfo的实例对象

static TreeInfo walk{  return recurse()}

//可能有许多参数,所有有很多walk方法。

但都只有一个最终方法,它要求参数1是FIle,参数2是正则表达式。从第一个遍历,看是否文件目录,是的话循环递归遍历,不是的话加入对象lists里。

private TreeInfo recurse(File startDir,String regex){

  TreeInfo treeInfo = new TreeInfo (){};

//file.isDirectory()和isFile()方法我一直搞不懂 如果是文件的话,文件里面肯定要装东西,那些东西不也是文件吗? 而isDirectory下面也是文件,那么这两个方法有什么区别呢???


for(File item:startDir.listFiles())

  if(startDir.isDirectory()){

  treeInfo.dirFiles.add(item);

treeInfo.addAll(recurse(item,regex));

else{

if(满足正则)

treeInfo.lists.add(item);

}

return treeInfo;

}

 

}

}


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值