Java获取、删除文件和目录

  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 }