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.Collection;
/*
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中
* 简单说,就是建立一个指定扩展名的文件的列表
* 思路:
* 1,必须进行深度遍历
* 2,要在遍历的过程中进行过滤。将符合条件的内容
* 都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中
*/
public class Test {
public static void main(String[] args) throws IOException {
//1,列出你想要遍历的目录
File dir = new File("d:\");
//2,建立一个过滤器对象,根据用户指定的内容过滤
FilterBySuffix filter = new FilterBySuffix(".java");
//3,建立一个容器来装过滤后的文件
ArrayList<File> list = new ArrayList<File>();
//遍历,过滤功能函数
getList(dir,filter,list);
File dest = new File("destFile.txt");
//遍历,写入功能函数
getdestFile(list,dest);
}
/**
* 遍历指定目录下的文件,把指定扩展名的文件过滤下来
* 然后将指定扩展名的文件装进容器中
* @param dir
* @param filter
* @param collection
*/
public static void getList
(File dir,FilenameFilter filter,Collection<File> collection){
File[] file = dir.listFiles();
for (File subfile:file) {
//判断是否是目录,是文件继续调用该函数
if(subfile.isDirectory()){
//递归
getList(subfile,filter,collection);
}
//不是目录,就进行过滤
else if(filter.accept(subfile, subfile.getAbsolutePath())){
collection.add(subfile);
}
}
}
/**
* 对容器进行遍历,将遍历后的文件写入到指定的文本文件里
* @param list
* @param dest
*/
public static void getdestFile(ArrayList<File> list,File dest){
//建立一个输出字符流缓冲区对象,提高效率
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(dest));
//对该容器进行遍历,然后写入到指定文件夹
for (File filename:list) {
bufw.write(filename.getAbsolutePath());
bufw.newLine();//换行
bufw.flush();//将缓冲区的数据刷新到文本文件中
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(bufw!=null){//防止发生空指针异常
try {
//关闭流
bufw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
import java.io.File;
import java.io.FilenameFilter;
/*
* 过滤器的设置
*/
public class FilterBySuffix implements FilenameFilter{
//功能扩展,过滤用户指定的后缀名
private String suffix;
public FilterBySuffix(String suffix) {
super();
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
//过滤该后缀名的文件
return name.endsWith(suffix);
}
}