package cn.com.propertiesdemo;
import java.util.List;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
/**
* 需求:建立一个文本文件,将指定目录(包含子目录)下,指定扩展名的文件的绝对路径存储到这个文本文件中,
* 思路:1.必须进行深度遍历
* 2.在深度遍历的过程中进行过滤,将符合条件的内容都存储到容器中
* 3.对容器中的内容进行遍历,将绝对路径写入到文本文件中
* @author Administrator
*
*/
public class Demo_7 {
public static void main(String[] args) {
File dir=new File("");
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith(".java");
}
};
List<File> list=new ArrayList<File>();
getFiles(dir,filter,list);
File destFile=new File(dir,"javalist.txt");
write2File(list,destFile);
}
/**
* 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤
* 将过滤后的内容存储到指定容器List中
* @param dir
* @param filter
* @param list
*/
public static void getFiles(File dir,FilenameFilter filter,List<File> list){
//获取当前目录下所有的文件和文件夹对象
File[] files=dir.listFiles();
//对目录进行深度遍历
for(File file:files){
//递归
if(file.isDirectory()){
getFiles(file,filter,list);
}else{
//对深度遍历的文件进行过滤器的过滤,将符合条件的File对象,存储到List集合中
if(filter.accept(dir, file.getName())){
list.add(file);
}
}
}
}
public static void write2File(List<File> list,File destFile){
BufferedWriter bufw=null;
try{
bufw=new BufferedWriter(new FileWriter(destFile));
for(File file:list){
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}catch(IOException e){
throw new RuntimeException("写入失败!");
}finally{
if(bufw!=null){
try{
bufw.close();
}catch(IOException e){
throw new RuntimeException("关闭失败!");
}
}
}
}
}
|
|