A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨增坤 金牌黑马   /  2013-7-22 15:14  /  1180 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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());
                }


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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

10 个回复

倒序浏览
加一句file.delete()应该就行了。在最开始的时候。
回复 使用道具 举报
循环内使用 files[i] 。判断是否是目录。

你中间写错一点
回复 使用道具 举报
本帖最后由 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 15:22
加一句file.delete()应该就行了。在最开始的时候。

如果在开始加file.delete()的话,会报异常的,
回复 使用道具 举报
forward 发表于 2013-7-22 17:14
public static void main(String[] args) throws IOException {

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

我运行了下没问题啊。可以删掉
回复 使用道具 举报
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 18:54
你在deleteDirec(files);后面加一句  files.delete();试试

谢谢,我按照你的方式,运行成功了,但是为什么老师说的那样运行为什么能成功呢!
回复 使用道具 举报
谢谢大家回复,这个问题解决了!
回复 使用道具 举报
forward 发表于 2013-7-22 19:01
谢谢,我按照你的方式,运行成功了,但是为什么老师说的那样运行为什么能成功呢! ...

System.out.println(file + "--" + file.delete());问题是最后这句应该是files【i】而你是file,按照你的写法相当与你把整个目录删除(前提条件是目录为空才能删除),所以就出现了问题,估计是代码抄错了吧。
回复 使用道具 举报
罗广伟 发表于 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一直就是文件夹,那最后是怎么删除的呢。
这有点疑问,虽然结果是正确的,

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马