黑马程序员技术交流社区
标题:
IO流删除带内容的目录中的疑问
[打印本页]
作者:
付江涛
时间:
2014-7-21 10:04
标题:
IO流删除带内容的目录中的疑问
本帖最后由 付江涛 于 2014-7-21 10:06 编辑
/*
删除一个带内容的目录。
*/
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
File dir=new File("c:\\abc");
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());
}
}
复制代码
假设文件夹:
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