黑马程序员技术交流社区
标题:
代码理解问题
[打印本页]
作者:
xiatian
时间:
2013-5-31 01:07
标题:
代码理解问题
public class DeleteFileDemo {
public static void main(String[] args) {
File file = new File("test");
deleteFiles(file);
}
private static void deleteFiles(File file) {
File[] fileArray = file.listFiles();
if (fileArray != null) {
for (File f : fileArray) {
if (f.isDirectory()) {
deleteFiles(f);
} else {
System.out.println(f.getName() + ":" + f.delete());
}
}
}
System.out.println(file.getName() + ":" + file.delete());
}
}
有两个文件夹,两个文件夹中分别有一个文本文件。
我的理解是,先把文件都删了,然后再删文件夹。可是系统运行的顺序是,进入第一个文件夹,先删了文件,然后直接把文件夹删了,然后到另一个文件夹里做相同操作。
删除文件夹的代码是写在for循环外面的,为什么会中途跳出来呢?
作者:
原满
时间:
2013-5-31 01:40
test
|——Dir1——file1.txt
|——Dir2------file2.txt
File[] fileArray = file.listFiles(); //返回 为 {Dir1, Dir2}
for (File f : fileArray) {
if (f.isDirectory()) { //首先判断 Dir1.isDirectory() 返回true
deleteFiles(f); //递归调用deleteFiles(Dir1); 程序会停在这儿,直到执行完 deleteFiles(Dir1); 才会执行后面的代码
所以程序运行的顺序是进入第一个文件夹,先删了文件,然后直接把文件夹删了
作者:
逸盏清茶
时间:
2013-5-31 02:07
本帖最后由 逸盏清茶 于 2013-5-31 02:11 编辑
private static void deleteFiles(File file) {
File[] fileArray = file.listFiles();
if (fileArray != null) {
for (File f : fileArray) {
if (f.isDirectory()) {
deleteFiles(f);
/* 相当于这样
{
File[] fileArray = f.listFiles();
if (fileArray != null) {
for (File f : fileArray) {
if (f.isDirectory()) {
deleteFiles(f);
} else {
System.out.println(f.getName() + ":" + f.delete());
}
}
}
System.out.println(file.getName() + ":" + file.delete()); //这里删除了文件夹
}
*/
} else {
System.out.println(f.getName() + ":" + f.delete());
}
}
}
System.out.println(file.getName() + ":" + file.delete());
}
复制代码
虽然你删除文件夹的代码是写在for循环外面的,可确是定义在deleteFiles()方法里面的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2