/**
* File文件综合应用
* 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中。
*
* 思路:1.需要深度遍历。--递归
* 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中
* 3.将容器中的内容遍历,写入到指定文件中
*
*/
代码:
FilenameFilter 过滤器:
package com.lp.ecjtu.File.filter; import java.io.File; import java.io.FilenameFilter; public class FileterByJava implements FilenameFilter { private String SufixName;//传入过滤的名称 public FileterByJava(String SufixName){ this.SufixName = SufixName; } @Override public boolean accept(File dir, String name) { System.out.println("dir:"+dir+"_____"+"name:"+name); return name.endsWith(SufixName); } }
主程序:程序都有注释,请看程序
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; /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中。 * * 思路:1.需要深度遍历。--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ public class FileNameFileterWriteFile { /** * @param args */ public static void main(String[] args) { File dir = new File("E:\\demodir"); FilenameFilter fileter = new FileterByJava(".bak");//过滤.bak文件 List<File>fileList = new ArrayList<File>(); getFileList(dir,fileter,fileList); File desFile = new File(dir, "FileList.txt"); write2File(fileList, desFile); } /** * * @param dir 需要遍历的目录 * @param filter 过滤满足条件的文件 * @param fileList 存放符合条件的容器 */ public static void getFileList(File dir,FilenameFilter filter,List<File>fileList){ if(dir.exists()){ File[] files = dir.listFiles();//找到目录下面的所有文件 for(File file:files){ //递归 if(file.isDirectory()){ getFileList(file,filter,fileList); }else{ //对遍历的文件进行过滤,符合条件的放入List集合中 if(filter.accept(dir, file.getName())){ fileList.add(file); } } } } } /** * 将容器中的文件遍历,写入到目的文件中 * @param list 存放满足条件的文件的集合 * @param desFile 要写入的目的文件 */ public static void write2File(List<File>fileList,File desFile){ BufferedWriter bw = null; try { //使用字符流写入到目的文件中 bw = new BufferedWriter(new FileWriter(desFile)); //遍历List集合 for(File file:fileList){ bw.write(file.getAbsolutePath());//写入目的文件绝对路径 bw.newLine(); bw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally{ try { if(bw != null){ bw.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
输出:在指定的目录下面创建目的文件:FileList.txt,里面存放:
E:\demodir\FileDir\Professional_32_2052.dat.bak
E:\demodir\FileDir\sgim_piccell.v1.bin.bak
E:\demodir\FileDir\sgim_picidx.v1.bin.bak