FilenameFilter接口:
实现此接口的类实例可用于过滤器文件名
此接口中一个唯一的方法:实现他的类必须实现此方法来定义过滤规则
方法摘要 | |
---|---|
boolean | accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中。 |
boolean accept(File dir, String name)
- 测试指定文件是否应该包含在某一文件列表中。
-
-
参数:
-
dir
- 被找到的文件所在的目录。 -
name
- 文件的名称。
返回:
-
当且仅当该名称应该包含在文件列表中时返回
true
;否则返回false
。
-
package cn.itheima.cway.IO;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* 需求:将指定目录下的所有.java文件的绝对路径输出到一个文本文件中
* 思路:
* 1、必须进行深度遍历
* 2、必须有过滤器,在遍历的过程中进行遍历,将符合条件的内容存入容器中
* 3、对容器中内容进行遍历,并将绝对路径存入到文件中
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建一个需要遍历的目录
File dir=new File("F:\\java");
//创建一个文件名过滤器的匿名内部类,用于过滤.class文件
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
};
//创建一个list集合,用于临时存放目录下所有.class文件
List<File> list=new ArrayList<File>();
//调用getFiles方法,方法的作用:遍历指定目录dir下面满足filter过滤器规则的文件,并存入到list集合中
getFiles(dir,filter,list);
//创建一个目的文件,用于存放满足过滤器条件的文件的绝对路径
File dec=new File("f:\\s\\1.txt");
//如果文件不存在,则创建
if(!dec.exists())
dec.createNewFile();
//调用write2File方法,方法的作用是:将list集合中的内容写入到目标文件中
write2File(list,dec);
}
/**
* 对指定目录中的内容进行深度遍历,并按照指定的过滤器进行过滤
* 将过滤后的内容存入到指定容器List中
* @param dir
* @param filter
* @param list
*/
private static void getFiles(File dir,FilenameFilter filter,List list) {
//获取到指定目录dir下面所有的文件列表
File[] files=dir.listFiles();
//用for增强循环遍历files
for(File file:files)
{
//判断是否是目录,如果是目录则递归调用该方法:getFiles()
if(file.isDirectory())
{
getFiles(file,filter,list);
}
else
{
//如果不是目录且满足过滤器条件的话则将文件对象存入到list集合中
if(filter.accept(dir, file.getName()))
list.add(file);
}
}
}
/**
* 将list集合中的内容的决定路径写入到文件
* @param list
* @param desFile
* @throws IOException
*/
private static void write2File(List<File> list,File desFile) throws IOException
{
BufferedWriter bw=null;
try {
//创建一个文件字符输出流
bw=new BufferedWriter(new FileWriter(desFile));
//遍历list集合(File类型)
for(File file:list)
{
//将文件的决定路径写入文件desFile中
bw.write(file.getAbsolutePath());
//写入一个换行符
bw.newLine();
//刷新缓存,保证内容被写入文件
bw.flush();
}
} finally
{
if(bw!=null)
{
try {
bw.close();
} catch (IOException e) {
throw new RuntimeException("关闭失败");
}
}
}
}
}