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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiatian 中级黑马   /  2013-5-31 01:07  /  1139 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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循环外面的,为什么会中途跳出来呢?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

2 个回复

正序浏览
本帖最后由 逸盏清茶 于 2013-5-31 02:11 编辑
  1. private static void deleteFiles(File file) {
  2.                 File[] fileArray = file.listFiles();
  3.                 if (fileArray != null) {
  4.                         for (File f : fileArray) {
  5.                                 if (f.isDirectory()) {
  6.                                         deleteFiles(f);
  7.                                        /* 相当于这样
  8.                                        {
  9.                                             File[] fileArray = f.listFiles();
  10.                                                 if (fileArray != null) {
  11.                                                         for (File f : fileArray) {
  12.                                                                  if (f.isDirectory()) {
  13.                                                                      deleteFiles(f);
  14.                                                                   } else {
  15.                                                                      System.out.println(f.getName() + ":" + f.delete());
  16.                                                                  }
  17.                                                        }
  18.                                               }

  19.                                           System.out.println(file.getName() + ":" + file.delete());   //这里删除了文件夹
  20.                                    }        
  21.                                   */
  22.                                 } else {
  23.                                         System.out.println(f.getName() + ":" + f.delete());
  24.                                 }
  25.                         }
  26.                 }

  27.                 System.out.println(file.getName() + ":" + file.delete());
  28.         }
复制代码
虽然你删除文件夹的代码是写在for循环外面的,可确是定义在deleteFiles()方法里面的。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
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);  才会执行后面的代码

所以程序运行的顺序是进入第一个文件夹,先删了文件,然后直接把文件夹删了

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

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