黑马程序员技术交流社区

标题: IO流删除带内容的目录中的疑问 [打印本页]

作者: 付江涛    时间: 2014-7-21 10:04
标题: IO流删除带内容的目录中的疑问
本帖最后由 付江涛 于 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());

     是这样吗?





作者: 阿磊    时间: 2014-7-21 10:17
是的,这里listFiles方法提取的是你指定目录下的文件,把自定目录下的文件返回成File【】数组。这里如果abc为空文件夹,如果目录为空,那么数组也将为空。所以for循环是不会被执行的,直接执行最后一句,删除了这个目录。
作者: lancerjs    时间: 2014-7-21 10:40
楼上说的对,当数组为空时,length为0,不满足循环条件,for循环不执行
作者: 青偆丶易逝〃    时间: 2014-7-21 10:42
我也觉的是这样的。。
作者: zhxu188    时间: 2014-7-21 10:50
刚学到这还真没注意到这个问题
作者: 0小菜鸟0    时间: 2014-7-21 11:02
我也觉的差不多吧
作者: a6511631    时间: 2014-7-21 14:27
为空时,直接跳过for循环,执行 System.out.println(dir+"::dir::"+dir.delete());
作者: 长跑※终点    时间: 2014-7-21 14:54
files为null时,for循环就不执行了,就执行后面的一句代码了。
作者: 渴望学习    时间: 2014-7-21 15:28
路过!!!




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