现在的位置: 首页 > 综合 > 正文

java文件操作【列出指定目录下的文件】

2013年08月26日 ⁄ 综合 ⁄ 共 4311字 ⁄ 字号 评论关闭

package book.io;

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

/**
* File类的list方法返回该目录下的所有文件(包括目录)的文件名,文件名不含路径信息
* File类的listFiles方法返回目录下的所有文件(包括目录)的File对象
* FilenameFilter是文件名过滤器接口类,所有自定义的文件名过滤器必须实现该接口的accept方法
* @author Administrator
*
*/
public class ListFileUtil {

/**
* 这是一个内部类,实现了FilenameFilter接口,用于过滤文件
*/
static class MyFilenameFilter implements FilenameFilter{

   private String suffix = "";//文件名后缀
  
   public MyFilenameFilter(String suffix){
    this.suffix = suffix;
   }
   public boolean accept(File dir, String name) {
   
    //如果文件名与指定的后缀相同便返回true
    if(new File(dir,name).isFile()){
     return name.endsWith(suffix);
    }
    else{
     //如果是文件夹
     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;
   }
  
   /*  
   * list方法返回该目录下的所有文件(包括目录)的文件名,文件名不含路径信息
   *
      String[] files = dirFile.list();
    for(int i = 0; i < files.length; i++){
     System.out.println(files[i]);
    }
   */
  
   //列出文件夹下所有的文件,listFiles方法返回目录下的所有文件(包括目录)的File对象
   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:/soft";
   System.out.println(dir + " 目录下的内容:");
   ListFileUtil.listAllFiles(dir);
  
   System.out.println(dir + " 经过过滤后的内容:");
   //新建一个文件名过滤器,参数为“.exe”
   FilenameFilter mf = new ListFileUtil.MyFilenameFilter(".exe");
   ListFileUtil.listFilesByFilenameFilter(mf, dir);
}

}

完整例子:

1.ListFiles类能够将目录下的所有文件名写入你指定的文本文件中

package File;

/*
* Created on 2004-12-9
* 我还未发现哪个常用软件中有这个功能,因此写了这个class
* 你可以将光盘中的文件名列在txt文件中,便于将来的查找,或打印出来。
* 不用为了查找某个光盘中的文件而一张一张光盘去找,又慢又损耗光驱。
* 当然也可以选择某个目录,记录下目录下的所有文件名。
*/

/**
* @author Shi Weifeng
* ListFiles类能够将目录下的所有文件名写入你指定的文本文件中。
*/
import java.io.*;
public class ListFiles {
private static String listFileStr="";
public static void main(String[] args) {
try
{
File saveFile=new File(args[1]);
FileWriter fw=new FileWriter(saveFile);
ListFiles lf=new ListFiles();
lf.listFile(args[0]);
fw.write(listFileStr);
fw.close();
}
catch (ArrayIndexOutOfBoundsException ea)
{
//参数提示
System.out.println("Usage: ListFiles <source dir> <target file>");

}
catch (IOException e)
{
System.out.println("IO error!/r/n"+e.toString());
}

}
public void listFile(String rp)
{

File file=new File(rp);
File list[]=file.listFiles();
for(int i=0;i<list.length;i++)
{
try
{
if (list[i].isDirectory())
{
new ListFiles().listFile(list[i].toString());
}
else
{
listFileStr+=list[i].getAbsolutePath()+"/r/n";
System.out.println(list[i].getAbsolutePath());
}
}
catch (Exception ex)
{
listFileStr+="Access deny:"+list[i].getAbsolutePath()+"/r/n";
System.out.println("Access deny:"+list[i].getAbsolutePath());
}
}
}

}

2.列出指定目录及子目录下的所有文件

package File;
import java.io.*;
public class ListAllFilename {

/**
* @param args
*/
public void searchFile(String filename){
   try
   {
   File file=new File(filename);
   File result[]=file.listFiles();
   for(int i=0;i<result.length;i++){
   if(!result[i].isFile()){
    searchFile(result[i].toString());
   }
   else System.out.println(result[i]);
   }
}
   catch(ArrayIndexOutOfBoundsException ea)
   {System.out.println("Usage: ListFiles <source dir> <target file>");}
}

public static void main(String[] args) {
   // TODO Auto-generated method stub
ListAllFilename f=new ListAllFilename();
f.searchFile("D://QQDownload");

}
}

抱歉!评论已关闭.