Cyh的博客

Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220

列出指定目录下的文件

Posted on 2009-05-24 20:32 啥都写点 阅读(205) 评论(0)  编辑  收藏 所属分类: J2SE
关键技术:
  • File类的list方法返回该目录下所有的文件(包括目录)的文件名,文件名不包含路径信息。
  • File类的listFiles方法返回该目录下所有文件(包括目录)的File对象。
  • FilenameFilter是文件名过滤器接口类,所有自定义的文件名过滤器必须实现该接口的accept方法。

package book.io;
import java.io.File;
import java.io.FilenameFilter;

public class ListFileUtil {
    
    
/**
     * 这是一个内部类,实现了FilenameFilter接口,用于过滤文件
     
*/
    
static class MyFilenameFilter implements FilenameFilter{
        
//文件名后缀
        private String suffix = "";
        
        
public MyFilenameFilter(String surfix){
            
this.suffix = surfix;
        }
        
public boolean accept(File dir, String name) {
            
//如果文件名以surfix指定的后缀相同,便返回true,否则返回false
            if (new File(dir, name).isFile()){
                
return name.endsWith(suffix);
            }
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 
= "C:/temp";
//        System.out.println((dir + "目录下的内容: "));
//        ListFileUtil.listAllFiles(dir);
//        
//        System.out.println();
//        System.out.println("经过过滤器过滤后的内容:");
//        //新建一个文件名过滤器。参数为".txt"
//        FilenameFilter myFilenameFilter = new ListFileUtil.MyFilenameFilter(".txt");
//        ListFileUtil.listFilesByFilenameFilter(myFilenameFilter, dir);
        
        String[] t 
= new File(dir).list();
        
for (int i=0; i<t.length; i++){
            System.out.println(t[i]);
        }
    }
}



                                                                                                       --    学海无涯
        


只有注册用户登录后才能发表评论。


网站导航: