`
heshifk
  • 浏览: 13013 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java File删除文件夹完整版

阅读更多

       经常写代码,应该能遇到这样一个问题,需要用java删除某个文件夹,如果文件夹下面有子文件夹或文件,可能子文件夹下面还有文件或者文件夹的话,这样直接是删不掉的,什么意思呢,我查遍java file的api,当文件夹下面还存在文件时,并没有直接提供方法删除。为了省事,刚才随便百度了一个,代码比较长,由于我需要删除的子文件夹中存在以“.”开头的文件,于是并不能删除。最后静下来自己写了一个,总共代码就十行左右,但是和一般人的思路都不太一样。

private void deleteFile(String fileName){     
        File file = new File(fileName);  
        if(file.exists()){  
            file.delete();  
        }  
        if(file.exists()){  
             String[] paths = file.list();  
             for(String str:paths){  
                 deleteFile(fileName+"\\"+str);  
             }  
             file.delete();  
        }  
    }  

       这样确实解决了问题,但是细想下,里面还是有些问题的,java不让删除有子文件的文件夹,估计也是为了安全考虑,没有任何提示,一旦删除,那就真没了。那我们来稍微修改下代码:

private void deleteFile(String fileName,boolean isForceDelete){		
		File file = new File(fileName);
		if(file.exists()){
			file.delete();
		}
		if(file.exists()){
			if(!isForceDelete){
				return;
			}
			 String[] paths = file.list();
			 for(String str:paths){
				 deleteFile(fileName+"\\"+str,isForceDelete);
			 }
			 file.delete();
		}
	}

       传这样一个参数,是否强制删除,如果文件夹下面还是文件夹,那就不删除,只要传一个boolean型的参数false就解决了问题。

       看到这,本以为解决了问题,其实还没有,你知道递归的执行效率很低,并且对资源的占用情况随着任务规模的扩大,对资源的占用将呈几何式增长么,你想一下,如果目标文件夹下面存在大量的层级比较深的文件和文件夹时,这时候的执行效率是比较低的,而且很占资源。一旦你选择了递归算法,我觉得执行效率没啥改变了,但是资源占用方面可以有所改变,因此可以从这方面考虑下。这时候不用疑惑,java的GC线程虽然是实时的在检测着,但是一旦系统规模大了,难免有些照应不过了,因此有些垃圾对象可能会删除的有点迟,这里可以查一下,gc回收垃圾的机制有一种是查询对象是否还有被引用,一旦没有被引用,则立即启用回收,准备回收,于是我们可以稍微再改下代码:

private void deleteFile(String fileName,boolean isForceDelete){		
		File file = new File(fileName);
		if(file.exists()){
			file.delete();
		}
		if(file.exists()){
			if(!isForceDelete){
				return;
			}
			 String[] paths = file.list();
			 for(String str:paths){
				 deleteFile(fileName+"\\"+str,isForceDelete);
			 }
			 file.delete();
			 paths = null;	// lets gc do its works
		}
		file = null;	// lets gc do its works
	}

       这样问题应该彻底解决了,虽然我也只是一名菜鸟,但是平时就应该用这样的标准要求自己,平时多研究下,随着经验的积累,总一天别人也会叫你"大牛"、"*哥",至于lets gc do its works 这样的注释写法源于java 源码,java源码都是开放的,建议大家没事多研究下java源码,里面有很多经典的代码。

 

 

 

分享到:
评论

相关推荐

    java删除文件夹完整版

    ### Java删除文件夹知识点详解 #### 一、背景与需求分析 在开发过程中,经常会遇到需要清理临时文件或旧版本项目文件的需求。特别是在Windows系统下,如果文件路径过长,可能会遇到无法直接通过操作系统界面删除的...

    java中实现复制文件和文件夹

    为了完全复制包括所有层级的文件夹,你需要在`copyDirectiory`方法中递归地处理每一个子文件夹,确保所有嵌套的文件和子文件夹都被处理。 在实际应用中,可能还需要添加错误处理、权限检查、覆盖确认等额外功能。...

    java实现文件夹复制

    在Java编程中,复制文件夹是一项常见的任务,特别是在处理数据迁移、备份或程序部署时。以下将详细讲解如何使用Java实现文件夹的复制。 首先,我们需要理解文件和文件夹的基本操作。在Java中,`java.io`包提供了...

    记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率

    在Java编程中,对比文件夹和文件是一项常见的需求,尤其在文档管理和版本控制中。本篇文章将探讨如何使用Java实现这一功能,特别是针对word、pdf、文本和图片等类型的文件进行对比计算,以及如何计算文本的相似率和...

    Java中的IO整理完整版

    在这个完整的Java IO整理版中,我们将深入探讨一些基本的IO概念和用法,主要包括文件操作、路径分隔符、文件删除、文件夹创建以及列出目录下的所有文件。 首先,创建新文件是Java IO中最基础的操作之一。在案例1中...

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    在IT行业中,尤其是在Java开发领域,访问网络上的共享文件夹是一项常见的任务。有时,我们可能需要从一个系统读取或写入另一个系统上的文件,这时就需要利用特定的库来实现。"smbj.jar"是一个专门用于处理SMB...

    java中的IO整理完整版

    首先,Java中的`File`类是操作文件和目录的基础,它提供了许多方法来创建、删除、重命名文件以及检查文件属性。在案例1中,通过`new File("D:\\hello.txt")`创建了一个`File`对象,然后调用`createNewFile()`方法...

    基于Java的minio相关操作示例

    MinIO是基于Apache 2.0许可的开源对象存储服务器,它与Amazon S3 API兼容,因此可以轻松地集成到Java应用中。本项目是一个基于SpringBoot的小型Java应用程序,展示了如何利用MinIO进行一系列操作,如创建bucket、...

    比较两个文件夹是否相同

    1. **文件名对比**:这是最基础的对比,检查两个文件夹内的文件名是否完全相同。如果有任何文件名不匹配,那么这两个文件夹就不相同。 2. **文件大小对比**:如果文件名相同,我们需要进一步比较文件的大小。文件...

    疯狂JAVA讲义(第2版)随书光盘

    通过《疯狂JAVA讲义(第2版)》的学习,读者不仅可以掌握Java编程语言,还能了解和实践软件开发的完整过程,从而成为一名合格的Java开发者。光盘中的代码资源则是学习过程中不可或缺的辅助工具,帮助读者从理论走向...

    Java文件夹复制(远程复制(网络传输),用于远程备份文件)

    Java文件夹复制功能是通过编程实现的,主要涉及到文件操作和网络通信两个核心知识点。这里有两个关键类:`FileSelection` 和 `BackupClient`。`FileSelection` 类用于选择和组织待复制的文件,而 `BackupClient` 类...

    完整版近在眼前-检测文件夹是否存在(大全)两种方法.rar

    这个压缩包文件"完整版近在眼前-检测文件夹是否存在(大全)两种方法.rar"似乎提供了两种不同的方法来实现这一功能。下面,我们将详细讨论这两种方法。 方法一:使用操作系统命令 在Windows操作系统中,我们可以...

    Java从零基础到精通详细笔记高清完整PDF版

    - `rm` 是删除文件的命令,使用 `rm [文件名]` 来删除文件。 - `mv` 是移动或重命名文件的命令,如 `mv [旧文件名] [新文件名]`。 - `cd` 是改变目录的命令,例如 `cd /home/user` 可以切换到 `/home/user` 目录。 ...

    删除svn信息的Java实现代码

    Java中删除文件或目录可以使用`java.io.File`类的方法。具体来说,我们可以使用`delete()`方法来删除单个文件,但要注意的是,如果该文件是一个目录,`delete()`方法只会成功删除空目录。为了删除整个目录树,我们...

    选择文件夹选择文件夹选择文件夹选择文件夹

    9. **编程接口**:在编程中,经常需要编写代码来选择或操作文件夹,如使用Python的os模块或Java的File类。 10. **权限与安全**:选择文件夹时,需注意权限设置,防止未经授权的访问或修改。 总之,选择文件夹这一...

    java版本eclipse工具mac版本

    总的来说,Java版本的Eclipse在Mac平台上提供了完整的开发环境,结合其丰富的插件和强大的社区支持,为开发者提供了高效、便捷的开发体验。无论你是初学者还是经验丰富的开发者,Eclipse都是一个值得信赖的选择。

    完整版近在眼前-检测文件夹是否存在(大全)两种方法.e.rar

    这个压缩包文件"完整版近在眼前-检测文件夹是否存在(大全)两种方法.e.rar"似乎包含了一个详细指南,讲述了如何检查特定文件夹是否存在于指定路径中。我们将探讨这两种方法,并深入理解它们的工作原理和应用场景。...

    遍历文件夹自动生成目录树

    例如,在Python中,我们可以使用`os`和`os.path`模块,而在Java中则可以使用`java.io.File`类。 **Python示例** 在Python中,可以使用以下代码来遍历文件夹并打印目录树结构: ```python import os def list_...

    完整版近在眼前-检测文件夹是否存在(大全)4中方法.rar

    这个压缩包文件"完整版近在眼前-检测文件夹是否存在(大全)4中方法.rar"显然包含了四种不同的方法来实现这一功能。以下是这四种方法的详细说明: 1. **命令行检查**: 在命令行环境下,无论是Windows的CMD还是...

    纯java操作svn--svnkit API

    SVNKit是一个完全由Java编写的Subversion客户端库,它允许开发者在Java应用程序中直接访问Subversion服务器而无需安装其他额外的客户端程序。这使得开发者能够更灵活地集成SVN功能到自己的项目中。 #### SVNUtil类...

Global site tag (gtag.js) - Google Analytics