天天看點

javaday51_IO流_IO綜合練習

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

   }

       }

 }

}