如果使用递归算法,可以容易的实现,但是,递归过程是从目录根到目录梢遍历的。这样要考虑的问题是,一次遍历只能删除文件和空文件夹。
如果配合使用Stack可以很好的转换为相反的遍历删除顺序,达到一次遍历彻底删除。
代码如下:
public class DelsOfBetter { private static Stack<File> fileStack=new Stack<File>();//栈对象,存储文件对象 private static int count=0; //入栈计数,计算当前目录层数 //将File对象按层次结构压入栈中 private static void filesToStack(File files){ //当前的文件(夹)压入栈中 fileStack.push(files); System.out.println(++count+"---"+files.getName()+"已入栈!"); if(files.isDirectory()&&files.list().length>=1) for(File f : files.listFiles()) filesToStack(f); } //删除全部的文件(夹) private static void delAll(File files){ filesToStack(files);//先压栈,后遍历 File file = null; while(!fileStack.isEmpty()&&(file = fileStack.pop())!=null){ if(file.delete()) System.out.println("成功删除:"+file.getName()); else System.out.println("删除:"+file.getName()+"失败!"); } } public static void main(String[] args) { System.out.println("请输入你要删除的目录/文件:"); long begin = System.currentTimeMillis(); delAll(new File(new Scanner(System.in).nextLine().trim())); System.out.println("删除完成,耗时:"+(System.currentTimeMillis()-begin)+"毫秒!"); } }