當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