论坛首页 Java企业应用论坛

递归删除指定目录下所有文件及子目录

浏览 11567 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (18)
作者 正文
   发表时间:2010-04-29  

public class Main 
{
	
	    public static void main(String[] args)
	    {
	    	Main m = new Main();
	    	m.deleteFile(new File("e:\\test\\"));
	    }
	    
	    public void deleteFile(File file)
	    {
	    		File[] temp = file.listFiles();
	    		for(int i=0;i<temp.length;i++)
	    		{
	    			System.out.println(temp[i].getName());
	    			if(temp[i].isDirectory())
	    	    	{
	    				if(temp[i].listFiles().length!=0)
	    					this.deleteFile(temp[i]);
	    				this.deleteDir(temp[i]);
	    	    	}else
	    	    	{
	    	    		temp[i].delete();
	    	    	}
	    		}
	    }
	
	    private void deleteDir(File file)
	    {
	    	if(file.listFiles().length==0)
	    		file.getAbsoluteFile().delete();
	    }
}
 
   发表时间:2010-04-29  
发一个我写的相对直观点的。

/**
	 * 删除此路径名表示的文件或目录。
	 * 如果此路径名表示一个目录,则会先删除目录下的内容再将目录删除,所以该操作不是原子性的。
	 * 如果目录中还有目录,则会引发递归动作。
	 * @param filePath
	 *            要删除文件或目录的路径。
	 * @return 当且仅当成功删除文件或目录时,返回 true;否则返回 false。
	 */
	public static boolean deleteFile(String filePath) {
		File file = new File(filePath);
		return deleteFile(file);
	}
	
	private static boolean deleteFile(File file){
		File[] files = file.listFiles();
		for(File deleteFile : files){
			if(deleteFile.isDirectory()){
				//如果是文件夹,则递归删除下面的文件后再删除该文件夹
				if(!deleteFile(deleteFile)){
					//如果失败则返回
					return false;
				}
			} else {
				if(!deleteFile.delete()){
					//如果失败则返回
					return false;
				}
			}
		}
		return file.delete();
	}
1 请登录后投票
   发表时间:2010-04-30  
用栈吧,不要用递归,递归有可能outofmemory的
0 请登录后投票
   发表时间:2010-04-30  
    public static boolean delete(File dir)
    {
        if (dir.isDirectory())
        {
            File[] listFiles = dir.listFiles();
            for (int i = 0; i < listFiles.length && delete(listFiles[i]); i++)
            {
            }
        }
        return dir.delete();
    }
0 请登录后投票
   发表时间:2010-05-01  
smartinvoke 写道
用栈吧,不要用递归,递归有可能outofmemory的

有文件路径的长度限制,一般不可能到溢出那层。。
0 请登录后投票
   发表时间:2010-05-01  
云中苍月 写道
    public static boolean delete(File dir)
    {
        if (dir.isDirectory())
        {
            File[] listFiles = dir.listFiles();
            for (int i = 0; i < listFiles.length && delete(listFiles[i]); i++)
            {
            }
        }
        return dir.delete();
    }

这个更简洁额,不过貌似是否不容易读?
0 请登录后投票
   发表时间:2010-05-01  
选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
0 请登录后投票
   发表时间:2010-05-01  
建议看下 apache commons-io
0 请登录后投票
   发表时间:2010-05-01  
dwangel 写道
建议看下 apache commons-io

赞成!!!!
0 请登录后投票
   发表时间:2010-05-01  
我就纳闷了,2行代码能解决的事,要用递归、栈什么的吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics