二、列出指定目录下的文件(包括子目录)

 当File对象指向一个目录时,可以通过File对象来获取目录下的文件信息。
    1、File类的list方法返回该目录下所有文件(包括目录)的文件名,文件名不包含路径信息。
    2、File类的listFile方法返回该目录下所有文件(包括目录)的File对象
    3、FilenameFilter是文件名过滤器接口类,所有自定义的文件名过滤器必须实现改接口的accept方法
   
    实例演示

 

 

package book.io;

import java.io.File;
import java.io.FilenameFilter;

public class ListFileUtil ...{
    
    /** *//** 这是一个内部类,实现了FilenameFilter接口,用于过滤文件     */
    static class MyFilenameFilter implements FilenameFilter ...{
        private String surfix = "";    //文件名后缀
        
        public MyFilenameFilter(String surfix) ...{
            this.surfix = surfix;
        }
        
        public boolean accept(File dir, String name) ...{
            //如果文件名与surfix指定的后缀相同,便返回true,否则返回false
            if(new File(dir, name).isFile()) ...{
                return name.endsWith(surfix);
            } else ...{
                //如果是文件夹,则直接返回true
                return true;
            }
        }
    }
    
    /** *//**
     * 列出目录下所有文件包括子目录的文件路径
     * @param dirName    文件夹的文件路径
     */
    public static void listAllFiles(String dirName) ...{
        //如果dir不以文件分隔符结尾,自动添加文件分隔符
        if (!dirName.endsWith(File.separator)) ...{
            dirName = dirName + File.separator;
        }
        File dirFile = new File(dirName);
        //如果dir对应的文件不存在,或者不是一个文件夹,则退出
        if (!dirFile.exists() || (!dirFile.isDirectory())) ...{
            System.out.println("List失败!找不到目录:" + dirName);
            return;
        }
        //列出源文件夹下所有文件(包括子目录)
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) ...{
            if (files[i].isFile()) ...{
                System.out.println(files[i].getAbsolutePath() + " 是文件!");
            } else if (files[i].isDirectory()) ...{
                System.out.println(files[i].getAbsolutePath() + " 是目录!");
                ListFileUtil.listAllFiles(files[i].getAbsolutePath());
            }
        }
    }
    
    /** *//**
     * 列出目录中通过文件名过滤器过滤后的文件
     * @param filter    文件名过滤器对象
     * @param dirName    目录名
     */
    public static void listFilesByFilenameFilter(FilenameFilter filter, String dirName) ...{
        //如果dir不以文件分隔符结尾,自动添加文件分隔符
        if (!dirName.endsWith(File.separator)) ...{
            dirName = dirName + File.separator;
        }
        File dirFile = new File(dirName);
        //如果dir对应的文件不存在,或者不是一个文件夹,则退出
        if (!dirFile.exists() || (!dirFile.isDirectory())) ...{
            System.out.println("List失败!找不到目录:" + dirName);
            return;
        }
        //列出源文件夹下所有能通过过滤器的文件(包括子目录)
        File[] files = dirFile.listFiles(filter);
        for (int i = 0; i < files.length; i++) ...{
            if (files[i].isFile()) ...{
                System.out.println(files[i].getAbsolutePath() + "是文件!");
            } else  if (files[i].isDirectory()) ...{
                System.out.println(files[i].getAbsolutePath() + "是目录!");
                ListFileUtil.listFilesByFilenameFilter(filter, files[i].getAbsolutePath());
            }
        }
    }
    
    public static void main(String[] args) ...{
        String dir = "D:/work/JavaExample";
        System.out.println(dir + " 目录下的内容:");
        ListFileUtil.listAllFiles(dir);
        
        System.out.println();
        System.out.println("经过过滤器过滤后的内容");
        //新建一个过滤器,参数为".java"
        FilenameFilter myFilenameFilter = new ListFileUtil.MyFilenameFilter(".java");
        ListFileUtil.listFilesByFilenameFilter(myFilenameFilter, dir);
    }

}


 源码分析:
    MyFilenameFilter类是一个自定义的文件名过滤器,实现了FilenameFilter接口。属性surfix表示文件过滤器支持的文件名后缀,在accept方法中,如果文件名的后缀为surfix,则返回true,表示文件能通过过滤器。如果是目录则直接通过。
    listFilesByFilenameFilter方法列出目录下满足文件名过滤器的所有文件的绝对路径。在使用File的listFile方法时指定文件名过滤器对象,它只返回能通过文件名过滤器的File对象。

 


文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/java/javaxl/20071129/89523.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值