天天看点

第三次学JAVA再学不好就吃翔(part100)--文件名称过滤器

学习笔记,仅供参考,有错必究

文件名称过滤器

  • FilenameFilter接口

FilenameFilter是java.io包下的一个接口,实现此接口的类实例可用于过滤器文件名。

  • list方法
public String[] list(FilenameFilter filter)      

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的字符串必须满足过滤器外,此方法的行为与 list() 方法相同。如果给定 filter 为 null,则接受所有名称。否则,当且仅当在此抽象路径名及其表示的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 时,该名称才满足过滤器。

list方法的源码:

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()]);
    }      
  • 举个例子

我们利用匿名内部类,来实现FilenameFilter接口,并过滤出csv文件:

package com.guiyang.bean;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Time;
import java.text.SimpleDateFormat;

import javax.xml.crypto.Data;

public class Demo5_FileMethed {

  public static void main(String[] args) {

    String path = "C:\\Users\\goatbishop\\Desktop\\data";
    File file = new File(path);

    String[] arr = file.list(new FilenameFilter() {

      @Override
      public boolean accept(File f0, String s1) {
        File file = new File(f0, s1);
        return file.isFile() && file.getName().endsWith(".csv");
      }
    });

    for (String string : arr) {
      System.out.println(string);
    }
  }
}      

输出:

data0710.csv
score.csv
weight.csv