乔乔

有时需要列出目录下指定类型的文件,例如:. java、. txt 等扩展名的文件。可以使用File类的下述两个方法,列出指定类型的文件:

  • 1、public String[ ] list(FilenameFilter obj) 该方法用字符串的形式返回目录下的指定类型的所有文件
  • 2、public File[ ] listFile(FilenameFilter obj) 该方法用 File 对象形式返回目录下的指定类型的所有文件

上述两个方法的参数 FilenameFilter 是一个接口,该接口有一个方法:

public boolean accept(File f,String name);

File 对象 f 调用 list 方法时,需向该方法传递一个实现 FilenameFilter 接口的对象,list 方法执行时,参数 obj 不断回调接口方法accept(File f,String name),该方法中的参数 f 为,调用 list 的当前目录,参数 name 被实例化为当前目录中的一个文件名,当接口方法返回 true 时,list 方法就将名字为 name 的文件存放到返回的数组中。

import java.io.*;

public class Filelei implements FilenameFilter {//此次使用本类作为接口

    /**
     * @param args
     */
    public void f(){
        File f=new File("E:\\Myworkspace\\08\\src");
        String []filename=f.list();//以字符串的形式,先列出当前目录下所有文件看一下(有什么类型的文件)
        for(int i=0;i<filename.length;i++){
            System.out.println(filename[i]);
        }
        System.out.println("********************************");
        String []fname=f.list(this);
        for(int i=0;i<fname.length;i++){
            System.out.println(fname[i]);
        }
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Filelei().f();
        
    }

    @Override
    public boolean accept(File f, String name) {//重写接口方法
        // TODO Auto-generated method stub
        return name.endsWith(".java");//返回当前目录下以.java结尾的文件
    }
}

运行结果:

A.java
B.java
C.java
J1.java
J2.java
J3.java
我是 DOC 文档.doc
我是 XLS 工作表.xls
我是文本文档.txt
********************************
A.java
B.java
C.java
J1.java
J2.java
J3.java