package java_Studing_day51_IO流11_综合练习;
import java.io.BufferedReader;
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 IoPractice1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//给定目录或者盘符
File dir=new File("F:\\");
//描述一个过滤器
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir,String name){
//f返回以.jpg结尾的文件
return name.endsWith(".java");
}
};
//创建arraylist容器,arraylist长度可变的数组结构列表
List<File> list=new ArrayList<File>();
getFile(dir,filter,list);
//指定结果存放的位置
File destFile=new File(dir,"txtFilePath1.txt");
writeToFile(list,destFile);
File f=new File(dir,"javaFilePath.txt");
destFile.renameTo(f);
}
public static void getFile(File dir,FilenameFilter filter,List<File> list){
//获取指定目录下的文件 ,返回抽象路径名
File[] files=dir.listFiles();
//遍历路径名数组
for(File file:files){
//如果是目录或者文件夹
if(file.isDirectory()){
//递归啦!继续遍历
getFile(file,filter,list);
}else{
//否则判断是否符合过滤器条件
if(filter.accept(dir, file.getName()))
//添加到list表中
list.add(file);
}
}
}
public static void writeToFile(List<File> list,File destFile) {//传进去两个参数,一个数据源,一个接收结果,程序里边一倒腾
BufferedWriter bfw=null;
try {
//开一个写入流
bfw = new BufferedWriter(new FileWriter(destFile));
//遍历集合列表中的每一个文件路径封装成的File对象
for(File file:list){
//获取绝对路径并写入
bfw.write(file.getAbsolutePath());
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("写入失败");
}
//保证程序异常时,流也能关闭
finally{
if(bfw!=null)
try {
bfw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("关闭失败");
}
}
}
}