`
heshifk
  • 浏览: 10868 次
  • 性别: 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面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题目与技巧1

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    图片浏览器-Java课程设计.doc

    resizeIcon(ImageIcon,JLabel)控制图片显示大小的函数 deleteFile(File)删除文件函数 main(String[])主函数 2 主要代码 整个程序的界面如下图: 2.1 选择文件夹功能 class TreeSelect implements ...

    java面试题以及技巧

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    VGit:用Java编写的简单git服务器

    VGit 用Java编写的简单git服务器 建立和运行 ...使用java -jar path/to/file.jar命令运行编译的发行版。 然后打开localhost:8080 使用Docker构建并运行 生成vgit image docker docker build . -t vg

    java面试题及技巧3

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    java面试题以及技巧6

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    Java之IO流学习总结

    File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断...

    Amazon-S3-FileSystem-NIO2:Java 7的S3文件系统提供程序

    该项目提供了第一个API实现,虽然没有经过优化,但是“完整”可以直接在Amazon S3上管理文件和文件夹。 #### 如何使用 从Maven Central下载 < groupId>com.upplication</ groupId> < artifactId>s3fs ...

    java 混淆工具,不可逆 jocky 也许是最好的了

    注2:如果在Eclipse中找不到Jocky插件,请删除 Eclipse安装目录/configuration/org.eclipse.update 文件夹 (Maybe an eclipse bug?)。 2.4 如何使用符号保留指令 除了在命令行用 -scramble 参数控制符号混淆级别...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    Google Android SDK开发范例大全(完整版) 包含部分书中源码 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 ...

    Google Android SDK开发范例大全(完整版)

    5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——getCacheDir与getFilesDir 5.17 打开/关闭WiFi服务——WifiManager状态判断 5.18 取得SIM卡内的信息——TelephonyManager...

    飞鸽传书(IPMessenger) 源码

    不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, ...

    word源码java-Sublime-Setting-User:SublimeText3设置文件保存专用

    快捷键完整版见后文,这里只列个人习惯。 四种 Goto : Ctrl + P 文件定位 Ctrl + ; 词语定位 # Ctrl + R 函数定位 @ Ctrl + G 行号定位 : 括号前后移动光标:Ctrl + M 以单词为单位前后移动光标:Ctrl + Left/Right...

    synology-dsm-file-duplicate-remover:Synology DSM 213j +的文件重复删除器

    synology-dsm-文件复制-删除 我创建了此实用程序,以通过保留找到的第一个版本来一次性删除重复的文件,因为dsm仅允许一个一个地删除每个单独的文件。 我添加了在实际运行真正的删除操作之前进行空运行(不删除)的...

Global site tag (gtag.js) - Google Analytics