1 package properties; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileWriter; 6 import java.io.FilenameFilter; 7 import java.io.IOException; 8 import java.util.ArrayList; 9 import java.util.List;10 11 import Filter.SuffixFilter;12 13 public class File2Text {14 15 /**16 * 获取指定目录下,指定扩展名的文件(包含子目录中的)17 * 这些文件的绝对路径写入到一个文本文件中。18 * 19 * 简单说,就是建立一个指定扩展名的文件的列表。 20 * 21 * 思路:22 * 1,必须进行深度遍历。23 * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。24 * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。25 * @param args26 * @throws IOException 27 */28 29 public static void main(String[] args) throws IOException {30 File dir = new File("E:\\javaproject\\Studying");31 Listlist = new ArrayList ();32 33 SuffixFilter SuffixFilter = new SuffixFilter(".txt");34 35 getFiles(dir,SuffixFilter,list);36 37 File destFile = new File(dir,"javalist.txt"); 38 write2File(list,destFile);39 40 }41 42 public static void getFiles(File dir,FilenameFilter filter,List list) {43 File[] files = dir.listFiles();44 for(File file:files){45 if(file.isDirectory())46 getFiles(file,filter,list);47 else{48 //对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。 49 if(filter.accept(dir,file.getName())){50 list.add(file);51 }52 }53 54 }55 56 }57 public static void write2File(List list,File destFile)throws IOException{58 59 BufferedWriter bufw = null;60 try {61 bufw = new BufferedWriter(new FileWriter(destFile));62 for(File file : list){63 bufw.write(file.getAbsolutePath());64 bufw.newLine();65 bufw.flush();66 }67 68 69 } /*catch(IOException e){70 71 throw new RuntimeException("写入失败");72 }*/finally{73 if(bufw!=null)74 try {75 bufw.close();76 } catch (IOException e) {77 78 throw new RuntimeException("关闭失败");79 }80 }81 }82 83 }
1 package Filter; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 6 public class SuffixFilter implements FilenameFilter { 7 8 private String suffix; 9 //重写构造方法,被调用时可直接传入过滤的文件类型。10 11 public SuffixFilter(String suffix) {12 super();13 this.suffix = suffix;14 }15 16 public boolean accept(File dir, String name) {17 return name.endsWith(suffix); //返回suffix 类型文件18 //return name.contains(suffix); //返回包含文件名中包含suffix19 }20 21 }