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;


/**************************
 * 练习1:
 * 获取指定目录下指定扩展名的文件(包含子目录)
 * 然后将这些文件的绝对路径写入到一个文本文件中中
 * 
 * 
 * 解析:建立一个指定拓展名文件的列表
 * 
 * 思路:
 *  1.必须进行深度遍历
 *  2.遍历的过程中遍历,将符合条件的内容存储到容器中
 *  3.对容器中的内容进行遍历,并将绝对路径写入到文件中
 * 
 * 
 * */






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);
  
    }
  
    
    
  /******
   * 对指定目录中的内容进行遍历,并按照指定过滤器进行过滤
   * 将过滤后的内容存储到指定容器list中
   * 
   * 
   * */  
 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);
 }
   }
    
}


 /************
  * 将获取到的路劲列表写到本地文件中
 * @throws IOException 
  * 
  * 
  * */
 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("关闭失败");
   }
       }
 }
    
    
}

猜你喜欢

转载自blog.csdn.net/weixin_38023579/article/details/72439284