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 args
26 * @throws IOException
27 */
28
29 public static void main(String[] args) throws IOException {
30 File dir = new File("E:\\javaproject\\Studying");
31 List<File> list = new ArrayList<File>();
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<File> 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<File> 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); //返回包含文件名中包含suffix
19 }
20
21 }