专业的JAVA编程教程与资源

网站首页 > java教程 正文

使用java的堆栈stack来删除超大文件夹

temp10 2024-09-30 00:22:57 java教程 12 ℃ 0 评论

当文件夹很大时,子目录超多时,发现windows删除文件夹很慢,有时删除了一天都还没删除,一直在收集发现文件,我有一次删除一个文件夹,发现里面有几百万个文件,导致windows一直删除不成功。为了快速删除超大文件夹,我们可以自己写一个删除文件夹的java程序的。

因为java删除目录时,必须要保证目录为空才能删除,我们必须先将目录里面的文件删除。这里使用java的堆栈stack来删除目录,利用堆栈的先进后出的原理,实现目录从里向外删除。

使用java的堆栈stack来删除超大文件夹

大概思路:先从顶级目录遍历,发现是目录,检查是否有文件或子目录,有:则当前目录入栈,对子目录或文件检查入栈,循环操作;没有:则直接删除。这样保证父目录一定是先入栈,子目录后入栈

代码如下:

import java.io.File;
import java.util.Stack;

/**
 * 使用java的堆栈先进后出的特点来删除多层文件夹
 * @author prince
 *
 */
public class TestDelDir {
	public static void main(String[] args) {


        File  root=new File("C:\\Users\\prince\\Desktop\\a");
        Stack<File> stack=new Stack<>();
        //先把顶级目录放入堆栈中
        stack.push(root);

        while(stack.size()>0){
        	//栈顶元素出栈
            File file = stack.pop();
            if(file.isDirectory()){
            	//文件是目录时,要对子目录进行入栈递归
                File[] subfiles = file.listFiles();
                if(subfiles!=null&&subfiles.length>0){
                    stack.push(file);
                    for(File subfile:subfiles){
                        if(!subfile.isDirectory()){
                        	//如果是文件时,直接删除即可
                            System.out.println("删除文件-1----"+subfile.getAbsolutePath());
                            subfile.delete();
                        }else{
                            File[] ls = subfile.listFiles();
                            //如果是目录
                            if(ls==null||ls.length==0){
                            	//目录为空时,直接删除
                                System.out.println("删除空目录----"+subfile.getAbsolutePath());
                                subfile.delete();
                            }else{
                            	//目录不为空时,进栈,继续遍历子目录
                                System.out.println("非空目录入栈---"+subfile.getAbsolutePath());
                                stack.push(subfile);
                            }
                        }
                    }
                }else{
                	//文件为非目录,直接删除
                	System.out.println("删除文件-2----"+file.getAbsolutePath());
                    file.delete();
                }
            }
        }


    }
}

运行效果:









以上就是堆栈入栈出栈的过程,通过测试,发现使用堆栈删除文件夹,比使用递归的方法删除文件夹要快的多,递归删除效率相当低

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表