java文件操作类——递归删除,显示子目录

  1 package day01;
  2 
  3 import java.io.File;
  4 import java.io.FileFilter;
  5 import java.io.IOException;
  6 import java.io.RandomAccessFile;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 public class FileUtils {
 11     /**
 12      * 列出指定目录下(包括其子目录)的所有文件
 13      * 
 14      * @param dir
 15      * @throws IOException
 16      */
 17     public static void listDirectory(File dir) {
 18         if (!dir.exists()) {
 19             throw new IllegalArgumentException("目录:" + dir + "不存在");
 20         }
 21         if (!dir.isDirectory()) {
 22             throw new IllegalArgumentException(dir + "不是目录");
 23         }
 24         File[] subs = dir.listFiles();
 25         if (subs != null && subs.length > 0) {
 26             for (File sub : subs) {
 27                 if (sub.isDirectory()) {
 28                     listDirectory(sub);
 29                 } else {
 30                     System.out.println(sub);
 31                 }
 32             }
 33         }
 34     }
 35 
 36     /**
 37      * 删除指定目录及其包含的所有内容
 38      * 
 39      * @param dir
 40      * @throws IOException
 41      */
 42     public static void deleteDirectory(File dir) throws IOException {
 43         if (!dir.exists()) {
 44             throw new IllegalArgumentException("目录:" + dir + "不存在");
 45         }
 46         if (!dir.isDirectory()) {
 47             throw new IllegalArgumentException(dir + "不是目录");
 48         }
 49         File[] subs = dir.listFiles();
 50         if (subs != null && subs.length > 0) {
 51             for (File sub : subs) {
 52                 if (sub.isDirectory()) {
 53                     deleteDirectory(sub);
 54                 } else {
 55                     System.out.println(sub);
 56                     if (!sub.delete()) {
 57                         throw new IOException("无法删除文件:" + sub);
 58                     }
 59                 }
 60             }
 61         }
 62         System.out.println(dir);
 63         if (!dir.delete()) {
 64             throw new IOException("无法删除目录:" + dir);
 65         }
 66     }
 67 
 68     /**
 69      * 列出指定目录下指定扩展名的所有文件
 70      * 
 71      * @param dir
 72      * @param extensions
 73      * @param recursive
 74      * @return
 75      */
 76     public static List<File> listFile(File dir, final String[] extensions,
 77             boolean recursive) {
 78         if (!dir.exists()) {
 79             throw new IllegalArgumentException("目录:" + dir + "不存在");
 80         }
 81         if (!dir.isDirectory()) {
 82             throw new IllegalArgumentException(dir + "不是目录");
 83         }
 84         FileFilter ff = null;
 85         if (extensions == null || extensions.length == 0) {
 86             ff = new FileFilter() {
 87                 @Override
 88                 public boolean accept(File pathname) {
 89                     return true;
 90                 }
 91             };
 92         } else {
 93             ff = new FileFilter() {
 94                 @Override
 95                 public boolean accept(File pathname) {
 96                     if (pathname.isDirectory())
 97                         return true;
 98                     String name = pathname.getName();
 99                     for (String ext : extensions) {
100                         if (name.endsWith(ext)) {
101                             return true;
102                         }
103                     }
104                     return false;
105                 }
106             };
107         }
108         return listFile(dir, ff, recursive);
109     }
110 
111     public static List<File> listFile(File dir, final String filename,
112             boolean recursive) {
113         if (!dir.exists()) {
114             throw new IllegalArgumentException("目录:" + dir + "不存在");
115         }
116         if (!dir.isDirectory()) {
117             throw new IllegalArgumentException(dir + "不是目录");
118         }
119         FileFilter ff = null;
120         if (filename == null || filename.length() == 0) {
121             ff = new FileFilter() {
122                 @Override
123                 public boolean accept(File pathname) {
124                     return true;
125                 }
126             };
127         } else {
128             ff = new FileFilter() {
129                 @Override
130                 public boolean accept(File pathname) {
131                     if (pathname.isDirectory())
132                         return true;
133                     String name = pathname.getName();
134                     if (name.indexOf(filename) != -1)
135                         return true;
136                     else
137                         return false;
138                 }
139             };
140         }
141         return listFile(dir, ff, recursive);
142     }
143 
144     private static List<File> listFile(File dir, FileFilter ff,
145             boolean recursive) {
146         List<File> list = new ArrayList<File>();
147         File[] subs = dir.listFiles(ff);
148         if (subs != null && subs.length > 0) {
149             for (File sub : subs) {
150                 if (sub.isFile()) {
151                     list.add(sub);
152                 } else if (recursive) {
153                     list.addAll(listFile(sub, ff, true));
154                 }
155             }
156         }
157         return list;
158     }
159     public static void copyFile(File srcFile, File destFile) throws IOException {
160         if (!srcFile.exists()) {
161             throw new IllegalArgumentException("文件:" + srcFile + "不存在");
162         }
163         if (!srcFile.isFile()) {
164             throw new IllegalArgumentException(srcFile + "不是文件");
165         }
166         RandomAccessFile srcRaf = new RandomAccessFile(srcFile, "r");
167         if (!destFile.exists()) {
168             if (!destFile.createNewFile())
169                 throw new IOException("无法创建文件:" + destFile);
170         }
171         RandomAccessFile destRaf = new RandomAccessFile(destFile, "rw");
172         byte[] buffer = new byte[8 * 1024];
173         int len = -1;
174         while ((len = srcRaf.read(buffer)) != -1) {
175             destRaf.write(buffer, 0, len);
176         }
177         srcRaf.close();
178         destRaf.close();
179     }
180 
181     public static void copyDirectory(File srcDir, File destDir)
182             throws IOException {
183         if (!srcDir.exists()) {
184             throw new IllegalArgumentException("文件:" + srcDir + "不存在");
185         }
186         if (!srcDir.isDirectory()) {
187             throw new IllegalArgumentException(srcDir + "不是目录");
188         }
189         if (!destDir.exists()) {
190             if (!destDir.mkdir())
191                 throw new IOException("无法创建目录:" + destDir);
192         }
193         File[] subs = srcDir.listFiles();
194         if (subs != null && subs.length > 0) {
195             for (File sub : subs) {
196                 if (sub.isFile()) {
197                     copyFile(sub, new File(destDir, sub.getName()));
198                 } else if (sub.isDirectory()) {
199                     copyDirectory(sub, new File(destDir, sub.getName()));
200                 }
201             }
202         }
203     }
204 }

 

posted on 2013-08-31 19:25  提子呀呀  阅读(374)  评论(0)    收藏  举报

导航