黑马程序员技术交流社区

标题: 指教文件夹的删除问题 [打印本页]

作者: 杨增坤    时间: 2013-7-22 15:14
标题: 指教文件夹的删除问题
public static void deleteDirec(File file) {


                File[] files = file.listFiles();
                for (int i = 0; i < files.length; i++) {
                        if (files.isDirectory()) {
                                deleteDirec(files);
                        } else {
                                System.out.println(files + "--" + files.delete());
                        }
                        System.out.println(file + "--" + file.delete());
                }


        }
我这样删除的是目录和子目录下的所有文件,而删除不掉文件夹,只是把目录下的文件全部删除掉了,留下的都是空的文件夹,
我执行了了一遍也是这样,请指教一下怎样删除整个文件夹和文件下的所有子目录。但是老师执行的为什么结果就是删除了整个文件夹呢??


作者: 王靖远    时间: 2013-7-22 15:22
加一句file.delete()应该就行了。在最开始的时候。
作者: Super_Class    时间: 2013-7-22 16:24
循环内使用 files[i] 。判断是否是目录。

你中间写错一点
作者: 杨增坤    时间: 2013-7-22 17:14
本帖最后由 forward 于 2013-7-22 17:17 编辑

public static void main(String[] args) throws IOException {

                File file = new File("F:\\t");
                deleteDirec(file);
        }

public static void deleteDirec(File file) {
                File[] files = file.listFiles();
                for (int i = 0; i < files.length; i++) {
                        if (files.isDirectory()) {
                                deleteDirec(files);
                        } else {
                                System.out.println(files + "--" + files.delete());
                        }
                        System.out.println(file + "--" + file.delete());
                }

        }
这样也不行,刚才我i复制的是待着【i】的,不知道为啥一粘贴在这里,就咋没了呢!
运行的时候是带着呢,结果还是删除不了文件夹。为什么呢??从代码的角度看,也都是判断是否是文件夹,然后递归的,也只是删除的是文件,文件夹删除不了,
请大家指教指教,

作者: 杨增坤    时间: 2013-7-22 17:18
王靖远 发表于 2013-7-22 15:22
加一句file.delete()应该就行了。在最开始的时候。

如果在开始加file.delete()的话,会报异常的,
作者: 罗广伟    时间: 2013-7-22 18:43
forward 发表于 2013-7-22 17:14
public static void main(String[] args) throws IOException {

                File file = new File("F:\\t");

我运行了下没问题啊。可以删掉
作者: 罗广伟    时间: 2013-7-22 18:54
forward 发表于 2013-7-22 17:14
public static void main(String[] args) throws IOException {

                File file = new File("F:\\t");

你在deleteDirec(files);后面加一句  files.delete();试试
作者: 杨增坤    时间: 2013-7-22 19:01
罗广伟 发表于 2013-7-22 18:54
你在deleteDirec(files);后面加一句  files.delete();试试

谢谢,我按照你的方式,运行成功了,但是为什么老师说的那样运行为什么能成功呢!
作者: 杨增坤    时间: 2013-7-22 19:01
谢谢大家回复,这个问题解决了!
作者: 罗广伟    时间: 2013-7-22 19:26
forward 发表于 2013-7-22 19:01
谢谢,我按照你的方式,运行成功了,但是为什么老师说的那样运行为什么能成功呢! ...

System.out.println(file + "--" + file.delete());问题是最后这句应该是files【i】而你是file,按照你的写法相当与你把整个目录删除(前提条件是目录为空才能删除),所以就出现了问题,估计是代码抄错了吧。
作者: 杨增坤    时间: 2013-7-22 21:01
罗广伟 发表于 2013-7-22 19:26
System.out.println(file + "--" + file.delete());问题是最后这句应该是files【i】而你是file,按照你的 ...

我知道咋回事了,应该把System.out.println(file + "--" + file.delete());这句代码方法for()循环外面,这句话是为了删除根目录然后执行就和老师的一样了,但是我认为结果不应该是这样的。我认为是:
假如 :
t
  |-a
     |-1.txt
     |-2.txt
  |-b
     |-b1.txt
     |-b2.txt执行过程:
判断a是文件夹 然后继续调用本方法,一看1.txt和2.txt不是文件夹,所以删除了
每次都是先判断是否是文件夹,如果是就接着递归,不是才删除,但是a一直就是文件夹,那最后是怎么删除的呢。
这有点疑问,虽然结果是正确的,






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2