公司项目有删除SVN版本文件,注册一个Delete SVN Folder也不错,代码实现也是可行的,自己模拟实现此类删除。
记录保留使用,有时也用的着,资源共享.....
/**
* 试完成一个函数,它递归枚举给定的目录,并将所有的.bak文件删除。但是,所有名为.svn的目录将被跳过。
*/
import java.io.*;
import java.util.*;
/**
* windows XP
* @author zxb
* @date 2009-07-09
* java version "1.4.2_09"
*/
public class RecurDelDirOrFile {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) {
try {
String path = "D:" + File.separator + "test"+File.separator+"aaaa.txt";// 传递的文件夹目录
//findFiles(path);
System.out.println("---------------文件夹集合--------------");
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i));
}
System.out.println("---------------文件集合--------------");
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
deleteFiles(path, false, false);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 文件夹和文件的迭代实现列举 过滤
public static void findFiles(String path) throws Exception {
if (path == null) {
throw new Exception("文件(夹)是空的...");
}
File f = new File(path);
File[] fs = null;
if (f.isDirectory()) {
fs = f.listFiles(new FileFilter() {
public boolean accept(File pathname) {
String fileName = pathname.getName().toLowerCase();
if (fileName.substring(fileName.lastIndexOf(".") + 1)
.equals("bak") || (pathname.isDirectory() && !fileName
.equals(".svn")))
return true;
else
return false;
}
});
for (int i = 0; i < fs.length; i++) {
if (fs[i].isDirectory()) {
list1.add(fs[i].getPath());
findFiles(fs[i].getPath());
} else {
list2.add(fs[i].getPath());
}
}
}else{
list2.add(f.getPath());
}
}
/**
* 文件删除操作 c:\\test
* @param fileName 文件目录路径名
* @param deleteSelf 是否删除自身
* @param deleteDir 是否删除目录
* @return boolean
* @throws Exception
*/
public static boolean deleteFiles(String fileName, boolean deleteSelf,
boolean deleteDir) throws Exception {
if (fileName == null
|| (fileName != null && fileName.trim().equals(""))) {
throw new Exception("文件路径不正确");
}
File f = new File(fileName);
if (!f.exists()) {
System.out.println("该文件不存在");
return true;
} else {
try {
findFiles(fileName);
System.out.println(list2.size());
for (int i = 0; i < list2.size(); i++) {
Thread.sleep(100);// 延迟删除
synchronized(new Object()){
new File(list2.get(i).toString()).delete();// 文件删除
System.out.println(list2.get(i).toString() + "====删除成功!");
}
}
Thread.sleep(list2.size()*500);//延迟删除
for (int i = list1.size() - 1; i >= 0 && deleteDir; i--) {// 倒置删除,从深层次目录删除目录结构
new File(list1.get(i).toString()).delete(); // 文件夹删除
}
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
if (deleteSelf) {
f.delete();
}
return true;
}
static List list1 = new ArrayList();// 文件夹名集合
static List list2 = new ArrayList();// 文件集合
}