TestInterface.java
package com.huawei;
import java.util.List;
public interface TestInterface {
public abstract List<String> getDirPaths(String name);
}
RecursiveDelFile.groovy
package com.huawei;
/**
* groovy实现java定义的接口
* @author Administrator
*
*/
public class RecursiveDelFile implements TestInterface{
/*
* 找到当前目录及其子目录中名字等于name的目录的绝对路径列表
* @see com.huawei.TestInterface#deleteDirPaths(java.lang.String)
* @return 绝对路径列表
*/
public List<String> getDirPaths(String name) {
List<String> result = new ArrayList<String>()
new File('.').eachFileRecurse {
if(it.getName().equalsIgnoreCase(name)) {
println "delete "+ it.getCanonicalPath()
result.add(it.getCanonicalPath())
}
}
return result
}
}
Target.java
package com.huawei;
import groovy.lang.GroovyClassLoader;
import java.io.File;
import java.util.List;
/**
* java调用groovy定义的方法获取当前目录下指定名字的目录列表
* 并全部删除
* @author Administrator
*
*/
public class Target {
public static void main(String[] args) {
ClassLoader cl = new Target().getClass().getClassLoader();
GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
try {
Class groovyClass = groovyCl.parseClass(new File(
"src/com/huawei/RecursiveDelFile.groovy"));
TestInterface bo = (TestInterface) groovyClass.newInstance();
//删除当前目录及其子目录下名字为target(不区分大小写)的目录
List<String> deletePaths = bo.getDirPaths("target");
for(String path : deletePaths)
{
FileUtils.deleteDirectory(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
FileUtils.java
package com.huawei;
import java.io.File;
/**
* 文件工具类
* 实现了删除目录和文件的方法
* @author Administrator
*
*/
public final class FileUtils {
public static boolean deleteDirectory(String sPath) {
boolean flag = false;
// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
if (!sPath.endsWith(File.separator)) {
sPath = sPath + File.separator;
}
File dirFile = new File(sPath);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
flag = true;
// 删除文件夹下的所有文件(包括子目录)
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag)
break;
} // 删除子目录
else {
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag)
break;
}
}
if (!flag)
return false;
// 删除当前目录
if (dirFile.delete()) {
return true;
} else {
return false;
}
}
public static boolean deleteFile(String path) {
// 如果Path不以文件分隔符结尾,自动添加文件分隔符
if (!path.endsWith(File.separator)) {
path = path + File.separator;
}
File dirFile = new File(path);
// 如果dir对应的文件不存在,或者不是一个文件,则退出
if (!dirFile.exists() || !dirFile.isFile()) {
return false;
}
return dirFile.delete();
}
}