java基础---->FilenameFilter之文件过滤

  FilenameFilter用于对列表中文件名的过滤,今天我们就开始java中FilenameFilter的学习。好多年了,你一直在我的伤口中幽居,我放下过天地,却从未放下过你,我生命中的千山万水,任你一一告别。

 

 java中FilenameFilter的使用

java文档对FilenameFilter的描述:

Instances of classes that implement this interface are used to filter filenames. These instances are used to filter directory listings in the list method of class File, and by the Abstract Window Toolkit's file dialog component.

 我们通过一个案例,来加深对FilenameFilter的了解与使用,项目结构如下:

一、 定义一个实现FilenameFilter的类,用于对文件名的过滤

package com.huhx.file;

import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/**
 * @author huhx
 */
public class DirFilter implements FilenameFilter {
    private Pattern pattern;

    public DirFilter(String regex) {
        pattern = Pattern.compile(regex);
    }

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

 

 二、 在DirList.java类中测试使用

package com.huhx.file;

import java.io.File;
import java.util.Arrays;
/**
 * @author huhx
 */
public class DirList {

    public static void main(String[] args) {
        File filePath = new File("file");
        String[] list = filePath.list(new DirFilter("E.*\\.java"));
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);

        for (String dirName : list) {
            System.out.println(dirName);
        }
    }
}

 

 三、 得到结果如下:

EscapingDNs.java
External.java

 

FilenameFilter的分析

一、 我们看一下File类的list(FilenameFilter filter)方法,代码如下:

public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}

调用list()方法得到文件夹下的所有文件名,然后遍历所有的文件名。通过FilenameFilter的accept方法进行过滤,将符合要求的文件名加入到列表中,最后返回

 

二、 File中有一个类似的方法listFiles(FileFilter filter)方法,我们看下代码:

public File[] listFiles(FilenameFilter filter) {
    String ss[] = list();
    if (ss == null) return null;
    ArrayList<File> files = new ArrayList<>();
    for (String s : ss)
        if ((filter == null) || filter.accept(this, s))
            files.add(new File(s, this));
    return files.toArray(new File[files.size()]);
}

与上述的list方法很类似,只是返回的类型不一样。

 

友情链接

 

转载于:https://www.cnblogs.com/huhx/p/baseusejavafileNameFilter.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值