1 package javatest;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.regex.Pattern;
6
7 class FileUtils
8 {
9 public static void main(String[] args)
10 {
11 String dir = "C:\\Users\\hp\\Desktop\\test";
12
13 System.out.println("递归的获取该目录下的所有文件:");
14 for (File f : FileUtils.getFilesRecursive(dir))
15 {
16 System.out.println(f.getAbsolutePath());
17 }
18
19 System.out.println("递归的获取该目录下的所有子目录:");
20 for (File f : FileUtils.getDirecotriesRecursive(dir))
21 {
22 System.out.println(f.getAbsolutePath());
23 }
24
25 System.out.println("删除该目录下的所有.html文件");
26 removeFiles(dir,null);
27 System.out.println("Done.");
28 }
29
30 /*******递归的获取某个目录下的所有文件******/
31 public static ArrayList<File> getFilesRecursive(String dir)
32 {
33 ArrayList<File> files = new ArrayList<File>();
34
35 File targetDir = new File(dir);
36 if (targetDir.exists())
37 {
38 for (File file : targetDir.listFiles())
39 {
40 if (file.isFile())
41 {
42 files.add(file);
43 }
44 else if (file.isDirectory())
45 {
46 files.addAll(getFilesRecursive(file.getAbsolutePath()));
47 }
48 }
49 }
50
51 return files;
52 }
53
54 /*******递归的获取某个目录下的所有子目录******/
55 public static ArrayList<File> getDirecotriesRecursive(String dir)
56 {
57 ArrayList<File> dirs = new ArrayList<File>();
58
59 File targetDir = new File(dir);
60 if (targetDir.exists())
61 {
62 for (File f : targetDir.listFiles())
63 {
64 if (f.isDirectory())
65 {
66 dirs.add(f);
67 dirs.addAll(getDirecotriesRecursive(f.getAbsolutePath()));
68 }
69 }
70 }
71
72 return dirs;
73 }
74
75 /*******删除某个目录下,文件名符合过滤条件的所有文件,然后删除空的子目录******/
76 public static void removeFiles(String targetDir, String fileRegex)
77 {
78 ArrayList<File> files = getFilesRecursive(targetDir);
79 //没有过滤条件,则删除该目录下的所有文件和子目录
80 if (fileRegex == null||fileRegex.equals("") )
81 {
82 //先删除所有文件.
83 for (File file : files)
84 {
85 file.delete();
86 }
87 //由内到外删除所有空目录.
88 ArrayList<File> dirs=getDirecotriesRecursive(targetDir);
89 for (int i=0;i< dirs.size();++i)
90 {
91 dirs.get(dirs.size()-1-i).delete();
92 }
93 }
94 else
95 {
96 //用正则表达式过滤文件名
97 Pattern pat = Pattern.compile(fileRegex);
98 for (File file : files)
99 {
100 if (pat.matcher(file.getAbsolutePath()).find())
101 file.delete();
102 }
103 }
104 }
105 }