码迷,mamicode.com
首页 > 编程语言 > 详细

java基础---->FilenameFilter的使用

时间:2016-05-21 10:11:09      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:

  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 Toolkits 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方法很类似,只是返回的类型不一样。

 

java基础---->FilenameFilter的使用

标签:

原文地址:http://www.cnblogs.com/huhx/p/fileNameFilter.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!