日期:2014-05-20  浏览次数:20737 次

初学到 IO,不是很理解,求解!
package com.recursion;

import java.io.File;

public class RecursionDelete {

public static void main(String[] args) {
File file = new File("D:/a");
deleteAll(file);
}

// 通过递归的方法删除 File 下的所有目录和文件夹.
public static void deleteAll(File file) {
// 是文件或空的目录,则直接删除.
if (file.isFile() || file.list().length == 0) {
file.delete();
} else {
File[] files = file.listFiles();
for (File f : files) {
deleteAll(f);
System.out.println(f.exists());
f.delete(); // 我想问的问题在这里!
}
}
}

}

我想问的问题是,在 我的问题那行,为什么教程里面要用那行,因为我试过,用和没用效果都是一样的,而且每次System.out.println(f.exists()); 都是 false,教程说 “最后把自己删除”,我怎么也无法理解这。

------最佳解决方案--------------------
for (File f : files) {
deleteAll(f);
System.out.println(f.exists());
f.delete(); //  这句话的意思是如果文件夹下没有文件了,自己也被删除,如果没有这句,文件夹下的内容删完后,他自己还存在。不信自己建个a文件夹,里面再建个b文件夹,b文件夹内存几个文件,你执行下代码看看,有这句b文件夹也被删除,没有这句,b文件夹还在。
}
------其他解决方案--------------------
应该是放到循环外的file.delete(),循环里把file目录下的全删了,然后把file删掉。
------其他解决方案--------------------
引用:
应该是放到循环外的file.delete(),循环里把file目录下的全删了,然后把file删掉。


2 楼说的对了,是运行的时候花两秒钟这样才能见 a被删除,
大侠你说的也对,不过如果放到外面的话好像不是很好,容易忽略。谢谢了总之。
------其他解决方案--------------------
引用:
for (File f : files) {
deleteAll(f);
System.out.println(f.exists());
f.delete(); //  这句话的意思是如果文件夹下没有文件了,自己也被删除,如果没有这句,文件夹下的内容删完后,他自己还存在。不信自己建个a文件夹,里面再建个b文件夹,b文件夹内存几个文件,你执行下代码看看,有这句b文件夹……


对对,就是删了自己要花 两秒钟这样,开始我忘记注意了,谢谢了。