Java删除文件或目录及目录下所有文件
一直在做C++相关开发的工作。突然某一天一时兴起,想学习下Java开发。然后再网上找到一本Java简明教程,入门是够用了。看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Java来实现这个功能。本以为很简单的功能,还是遇到一些问题。仔细分析下代码,定位到出问题的地方。在此处记录下,提醒自己不会重蹈覆辙。
1. 第一版的删除函数是这样写的
static boolean delFile(String filename) {
File file = new File(filename);
if (!file.exists()) {
return false;
}
if (file.isFile()) {
return file.delete();
} else {
String[] filenames = file.list();
for (String f : filenames) {
delFile(f);
}
return file.delete();
}
}
代码能编译过,但是运行结果并不符合预期结果。如果在一个大型系统,出现这样的问题,往往是一件很头疼的小事。我的做法是,遇到自己不熟悉的,先自己建一个小工程实现这一功能,添加测试用例。如果测试通过,才会移植到大系统上去。
经过仔细分析,上面的代码出问题的地方是第10行,file.list()返回的结果是当前路径下的所有文件的文件名,并不包含路径。所以递归调用时,因为检测文件不存在,而返回。然后就有下面这一版。
2. 正确的删除文件或目录方法
static boolean delFile(File file) {
if (!file.exists()) {
return false;
}
if (file.isFile()) {
return file.delete();
} else {
File[] files = file.listFiles();
for (File f : files) {
delFile(f);
}
return file.delete();
}
}
这版的代码直接以文件对象File为参数,file.listFiles()返回的也是自文件的File对象集合。File对象保存了该文件的具体位置,因此不会出现上一版出现的问题,这一版能正常的工作。
代码虽然能正常工作,但不是最简洁的版本。下面有一个更为简洁的版本。
3. 简单并能正常工作的版本
static boolean delFile(File file) {
if (!file.exists()) {
return false;
}
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
delFile(f);
}
}
return file.delete();
}
同样可以正常工作,但是代码没有重复的。
Java删除文件或目录及目录下所有文件的更多相关文章
- python递归列出目录及其子目录下所有文件
python递归列出目录及其子目录下所有文件 一.前言 函数的递归,简单来说,就是函数内部调用自己 先举个小例子,求阶乘 def factorial(n): if n == 0: return 1 e ...
- 虚拟机中如何Linux系统如何访问PC硬盘中的文件(如何将windows下的文件夹挂载到linux虚拟机下)
这段时间决定学习嵌入式,变打算安装个Linux系统先熟悉一下Linux系统的使用,但自己电脑上安装的win7系统又不想装双系统,一是闲麻烦,二是由于对Linux系统不熟悉担心会因为自己的误操作而损坏系 ...
- Python——用os模块寻找指定目录(包括子目录)下所有图片文件
import os # 导入os模块 def search_file(start_dir): img_list = [] extend_name = ['.jpg', '.png', '.gif'] ...
- python查找目录及子目录下特定文件
写这篇博客的缘由: 面试归来翻脉脉发现一个陌生的朋友提出一个面试题,设计实现遍历目录及子目录,抓取.pyc文件. 并贴出两种实现方法: 个人感觉,这两种方法中规中矩,不像是python的风格.pyth ...
- 复制目录及其子目录下所有文件DOC
echo 开始同步代码 set src_home=F:\work\sign\Bonade-Sign set dest_home=F:\work\testGit\sign5\Bonade-Sign se ...
- java web项目中 获取resource路径下的文件路径
public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...
- java打印出某一指定路径下的文件夹内的所有子文件夹和文件,并区分开来
public class printoutFile { public static void main(String[] args) { printFile(new File("D:\\te ...
- Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件
//生成一个文件对象: File file = new File(getClass().getClassLoader().getResource("test.xml").getPa ...
- php遍历一个文件下的所有文件和子文件夹下的文件
function AllFile($dir){ if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ if($file ...
- linux 如何统计某目录下所有文件个数
该目录以及该目录的子目录下普通文件个数: ls -lR |grep '^-' |wc -l ls -l 查询该目录下的所有文件 R 包含子目录,其实就是递归查看 grep '^-' 表示过滤掉(以&q ...
随机推荐
- [转]How to Create Custom Filters in AngularJs
本文转自:http://www.codeproject.com/Tips/829025/How-to-Create-Custom-Filters-in-AngularJs Introduction F ...
- git跟svn 服务端对比
Git已经火了很久,简单的使用也没有问题,但有几个问题一直以来都没有搞清楚:git跟svn有哪些异同,两者相互的优劣是什么,git的分布式怎么理解,为什么有离线提交,,,自己动手,分别看一下服务端跟客 ...
- css实现高度垂直居中
1:单行文字垂直居中: 如果一个容器中只有一行文字的话,定义height(高度)和 line-height(行高)相等即可. 如:<div style="height:25px;lin ...
- mybatis连接mysql数据库实现的jdbc功能
最近公司项目要使用myBatis,自己以前没有接触过,就在网上找到了一些资料研究了些.初步做出了基于myBatis连接mysql数据库的jdbc实现的功能. employee.java package ...
- Andrew Ng 的 Machine Learning 课程学习 (week5) Neural Network Learning
这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解 ...
- Machine learning preface
Machine learning Preface Definition T: Task E: Experience P: Performance Sequence: T -> E -> P ...
- C# winform文件批量转编码 选择文件夹
C# winform文件批量转编码 选择文件夹 打开指定目录 private void btnFile_Click(object sender, EventArgs e) { OpenFileDial ...
- .net iis6中配置伪静态
1.右键点击 要设置网站的网站 2.属性 ——>主目录 ——>配置——> 3.如右侧窗口,找到 .aspx 扩展名——>编辑——>复制 可执行文件的路径——>关闭 ...
- AutoResetEvent 2
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Oracle错误——ORA-03113:通信通道的文件结尾
请参考:http://blog.csdn.net/zwk626542417/article/details/39667999 今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误“ORA-010 ...