递归虽然简单效率却很低,
我就来个深度优先搜素删除文件的非递归实现吧,主要靠栈技术
直接上代码了:
import java.io.File;
import java.util.Stack;
public class Test
{
public static void main(String[] args)
{
File f=new File("c:\\test"); //任意一个File(文件或是文件夹)
deleteDir(f);
}
public static void deleteDir(File dir)
{
if(dir == null || (!dir.isDirectory() && !dir.isFile())) //如果为空或者非法直接返回
{
return;
}
if(dir.isFile())//如果传入的是文件便直接删除返回
{
dir.delete();
return;
}
Stack<File> list = new Stack<File>(); //定义栈,注意这个栈只存储文件夹(目录)不存储文件
list.push(dir);
while(!list.isEmpty()) //只要栈非空,就继续
{
File file = list.peek(); //获取栈顶元素(一定为文件夹(目录)),不弹出
if(file.listFiles().length == 0) //如果这个目录为空,则直接从栈定弹出并删除 然后继续循环
{
list.pop();
file.delete();
continue;
}
for(File file2:file.listFiles()) //否则迭代这个目录
{
if(file2.isFile()) //如果是文件直接删除不压栈
file2.delete();
else
list.push(file2);//如果是目录则压栈
}
}
}
}
哦了 |