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("關閉失敗");
}
}
}
}