代码:
import java.io.File;
import java.io.FilenameFilter;
public class Test {
static class MyFilenameFilter implements FilenameFilter{
private String sf = ""; //定义文件的后缀名
public MyFilenameFilter(String surfix){ //用构造法为sf变量赋值
this.sf = surfix;
}
//重写Filter接口中的accept()方法,判断指定的文件是否在指定的目录中
public boolean accept( File dir,String name ){
if ( new File( dir,name ).isFile() ) //
return name.endsWith(sf);
else
return true;
}
}
/**
* 获取指定目录下符合指定后缀名的所有文件
* @param filter is 过滤器对象
* @param dir_path is 目录路径
*/
public static void getFilesByFilter(FilenameFilter filter,String dir_path){
if ( !dir_path.endsWith(File.separator) )//如果dir_path不以文件分隔符结尾,自动添加文件分隔符
dir_path = dir_path + File.separator;
File dir_File = new File(dir_path);
if ( !dir_File.exists() || ( !dir_File.isDirectory() ) ){//如果指定的目录不存在或不是一个目录,则返回
System.out.println("失败!找不到指定目录"+dir_path);
return;
}
//列出指定目录下的所有符合过滤器条件的文件(包括子目录)
File[] fileArray = dir_File.listFiles(filter);//过滤
for ( int i = 0 ; i < fileArray.length ; i++ ){
if ( fileArray[i].isFile() )//如果是文件就输出绝对路径
System.out.println( fileArray[i].getAbsolutePath() + " 是文件");
else if ( fileArray[i].isDirectory()){//如果是目录,就递归输出目录下的文件的绝对路径
System.out.println( fileArray[i].getAbsolutePath() + " 是目录");
Test.getFilesByFilter( filter,fileArray[i].getAbsolutePath() );
}
}
}
/**
* 列出目录下所有文件和子目录路径
* @param dirName is 目录路径
*/
public static void getAllFiles( String dirName ){
if ( !dirName.endsWith(File.separator) )//如果dirName不以文件分隔符结尾,自动添加文件分隔符
dirName = dirName + File.separator;
File dirFile = new File(dirName);
if ( !dirFile.exists() || ( !dirFile.isDirectory() ) ){//如果dirNmae对应的文件不存在,或者不是一个文件夹,则返回
System.out.println("失败!找不到指定目录"+dirName);
return;
}
//列出源文件夹下面的所有文件(包括子目录)
File[] fileArray = dirFile.listFiles();
for ( int i = 0 ; i < fileArray.length ; i++ ){
if ( fileArray[i].isFile() )//如果是文件就输出绝对路径
System.out.println( fileArray[i].getAbsolutePath()+" ");
else if ( fileArray[i].isDirectory()){//如果是目录,就递归输出目录下的文件的绝对路径
System.out.println( fileArray[i].getAbsolutePath()+" ");
Test.getAllFiles( fileArray[i].getAbsolutePath() );
}
}
System.out.println();//换行
}
/**显示目录的基本信息**/
public static void main(String[] args){
String dir = "D:\\software\\eclipse\\Test";
System.out.println( dir+"目录下的内容:" );
Test.getAllFiles(dir);
System.out.println();//换行
System.out.println( "符合过滤器条件的文件如下:" );
FilenameFilter myFilternameFilter = new Test.MyFilenameFilter(".class");//新建一个过滤器,参数为“src”
Test.getFilesByFilter(myFilternameFilter, dir);//输出
}
}
运行结果:
D:\software\eclipse\Test目录下的内容:
D:\software\eclipse\Test\.classpath
D:\software\eclipse\Test\.project
D:\software\eclipse\Test\.settings
D:\software\eclipse\Test\.settings\org.eclipse.jdt.core.prefs
D:\software\eclipse\Test\bin
D:\software\eclipse\Test\bin\Test$MyFilenameFilter.class
D:\software\eclipse\Test\bin\Test.class
D:\software\eclipse\Test\src
D:\software\eclipse\Test\src\Test.java
符合过滤器条件的文件如下:
D:\software\eclipse\Test\.settings 是目录
D:\software\eclipse\Test\bin 是目录
D:\software\eclipse\Test\bin\Test$MyFilenameFilter.class 是文件
D:\software\eclipse\Test\bin\Test.class 是文件
D:\software\eclipse\Test\src 是目录