java IO-输入输出流(二)

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

    当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对象。

关于MyExplorer MyExplorer是一款模仿Mircrosoft Windows 的资管理器,使用JAVA编写,目前支持中文,日文,英文三个语言版本,供大家学习参考之用。 MyExplorer是作者利用休息时间所编写,实现了资管理器大部分常用的功能,但由于时间因素,部分功能未实现,如果有兴趣的朋友需要参考码,请与作者史永龙联系。 开发环境:Microsoft Windows XP SP2 + JDK 1.5.0 + Eclipse 3.3 使用说明: ⋆ 1.双击MyExplorer.jar,在出现下图的语言选择对话框时,请选择显示用的语言。MyExplorer默认设置为系统所使用的语言,目前提供中文,日文,英文三种语言版本。 ⋆ 2.选择语言后可进入下一界面,默认显示为Windows桌面。 ⋆ 3.向上功能:当所访问的目录不是桌面时,该按钮可用,可以用来访问父目录。 ⋆ 4.搜索功能:可以通过搜索按钮,在指定的目录下,搜索指定的文件,支持模糊搜索。 ⋆ 5.关于MyExplorer功能,可通过点击该按钮查看作者以及联系方式和版本信息。 ⋆ 6.转到功能:可在地址栏中输入目录名或文件名,点击“转到”按钮,访问相应的目录或文件。 ⋆ 7.执行功能,可在右侧List中双击访问该目录或双击运行某一文件。也可在左侧Tree上点击访问某一目录。 ⋆ 8.右键功能,可在某一目录或文件上单击右键,在弹出的右键菜单上使用相应的功能。目前提供复制,粘贴,刷新,重命名,删除(会彻底删除文件,不会移动到回收站,使用时请注意),新建,属性查看功能。 ♦ 复制功能:可复制一个文件,也可复制多个文件。 ♦ 粘贴功能:在需要粘贴的目录中粘贴所复制的文件。 ♦ 重命名功能 ♦ 删除功能 ♦ 新建功能:可新建文件夹,txt文档,doc文档,xls文档 ♦ 属性查看功能 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 注意事项: MyExplorer的删除功能是直接删除文件,不会移动到回收站,删除后不可恢复,使用时请注意。使用之前请务必阅读Readme.htm。 作 者 : 史永龙 日 期 : 2008年12月21日 联系方式 : bluecatsyl@sina.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值