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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李柯 中级黑马   /  2012-4-10 02:35  /  1757 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. class  RemoveDir
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 File dir=new File("F:\\test.txt");
  7.                 removeDir(dir);
  8.         }

  9.         public static void removeDir(File dir)
  10.         {
  11.                 File[] files = dir.listFiles();

  12.                 for (int x=0;x<files.length ;x++ )
  13.                 {
  14.                         if (files[x].isDirectory())
  15.                                 removeDir(files[x]);
  16.                         else[backcolor=Red]//为什么将else注释掉以后有的文件夹会被删两次?希望谁能解释一下?谢谢![/backcolor]
  17.                                 System.out.println(files[x].toString()+"-file-"+files[x].delete());
  18.                 }
  19.                 System.out.println(dir+"::dir::"+dir.delete());
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
如果你注释掉了else
你这里就出了点逻辑错误,因为,当你判断出 files[x]  不是文件夹
后,还是继续会执行了下面那句即:
import java.io.*;
class  RemoveDir
{
        public static void main(String[] args)
        {
                File dir=new File("F:\\test.txt");
                removeDir(dir);
        }

        public static void removeDir(File dir)
        {
                File[] files = dir.listFiles();

                for (int x=0;x<files.length ;x++ )
                {
                        if (files[x].isDirectory())
                                removeDir(files[x]);
                        else    // 这里注释掉, 但下面这句都会执行的
                      System.out.println(files[x].toString()+"-file-"+files[x].delete());
                }
                System.out.println(dir+"::dir::"+dir.delete());
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
因为你上面再if里面会删除一次。。如果外面不else。也会被执行。。。当他进入if里面删除了一次。。因为你外面没有else。。所以外面的那句不过是文件夹。。文件都会再删除一次。。。所以有的文件夹被删除了两次。。。
回复 使用道具 举报
本帖最后由 郑苑东 于 2012-4-10 09:07 编辑

if的意思是说当他是文件夹的时候进入 if 里面的代码。。这时候会删除会执行一次删除。。而如果你不加else删除。。那么下面那句就会变成可能会被执行的。。这时候无论文件,,,文件夹都会被删除。。。而执行完for循环之后  最后面的代码还会删除一次。。所以是两次。。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

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