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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付江涛 金牌黑马   /  2014-7-21 10:04  /  2100 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 付江涛 于 2014-7-21 10:06 编辑
  1. /*
  2. 删除一个带内容的目录。
  3. */
  4. import java.io.*;
  5. class RemoveDir
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 File dir=new File("c:\\abc");

  10.                 removeDir(dir);
  11.         }

  12.         public static void removeDir(File dir)
  13.         {
  14.                 File[] files=dir.listFiles();
  15.                
  16.                 for(int x=0;x<files.length;x++)
  17.                 {
  18.                         if(files[x].isDirectory())
  19.                                 removeDir(files[x]);
  20.                         else
  21.                                 System.out.println(files[x].toString()+":-file-:"+files[x].delete());
  22.                 }

  23.                 System.out.println(dir+"::dir::"+dir.delete());
  24.         }
  25. }
复制代码


假设文件夹:
       c:\\abc\\123 123为空文件夹

流程:
1、建File对象,与文件夹c:\\abc关联
2、调用removeDir,传入File对象。
3、执行removeDir,调用listFiles方法,返回File数组files。
4、执行for循环,判断,files[0]是否为文件夹,也就是123是否为文件夹。
     是!递归,调用自身。
     相当于::removeDir(c:\\abc\\123);
     想知道下一步流程是怎样的?
     API文档中:如果目录为空,那么数组也将为空。
    File[] files=null;
     获取null数组,就不会执行for循环了。
     直接执行 System.out.println(dir+"::dir::"+dir.delete());

     是这样吗?




8 个回复

倒序浏览

回帖奖励 +1

是的,这里listFiles方法提取的是你指定目录下的文件,把自定目录下的文件返回成File【】数组。这里如果abc为空文件夹,如果目录为空,那么数组也将为空。所以for循环是不会被执行的,直接执行最后一句,删除了这个目录。
回复 使用道具 举报

回帖奖励 +1

楼上说的对,当数组为空时,length为0,不满足循环条件,for循环不执行
回复 使用道具 举报

回帖奖励 +1

我也觉的是这样的。。
回复 使用道具 举报

回帖奖励 +1

刚学到这还真没注意到这个问题
回复 使用道具 举报

回帖奖励 +1

我也觉的差不多吧
回复 使用道具 举报

回帖奖励 +1

为空时,直接跳过for循环,执行 System.out.println(dir+"::dir::"+dir.delete());
回复 使用道具 举报

回帖奖励 +1

files为null时,for循环就不执行了,就执行后面的一句代码了。
回复 使用道具 举报

回帖奖励 +1

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