黑马程序员技术交流社区

标题: 删除文件夹,这样写为什么每次只能删除一层 [打印本页]

作者: 习嘻嘻    时间: 2013-11-15 20:47
标题: 删除文件夹,这样写为什么每次只能删除一层
public class FileDeleteDemo {
        public static void main(String[] args) {
                // 封装目录。
                File file = new File("test");

                // 功能
                deleteFiles(file);
        }

        private static void deleteFiles(File file) {
                // 获取指定目录下的文件和文件夹对象(File[])
                File[] fileArray = file.listFiles();

                        // 遍历这个数组,获取到每一个文件或者文件夹对象
                        for (File f : fileArray) {
                                if (f.delete()) {
                               
                                } else {
                                        deleteFiles(f);
                                }
                        }
                       
               
        }
}



作者: Weix1992    时间: 2013-11-15 21:33
  1.   for (File f : fileArray) {  //这里每次循环后,f都是指向根目录,如果里面还有文件夹的话,它并没有进去
  2.                                  if (f.delete()) {
  3.                                  
  4.                                  } else {
  5.                                          deleteFiles(f);
  6.                                  }
  7.                          }

复制代码

作者: 习嘻嘻    时间: 2013-11-15 21:44
Weix1992 发表于 2013-11-15 21:33

不是很明白,我慢慢看看
作者: Weix1992    时间: 2013-11-15 22:09
习嘻嘻 发表于 2013-11-15 21:44
不是很明白,我慢慢看看

比如的结构是这样test\a\b,当进入test后拿到所有文件还需要判断拿到的文件是不是文件夹,如果是就进入文件夹删掉里面的文件然后回到上个目录,主要采用了递归的思想~
作者: 习嘻嘻    时间: 2013-11-15 22:18
我先判断他能不能删除,能就删掉,如果不能就进入文件夹里面,再次调用那个方法,我这样有错吗
作者: 习嘻嘻    时间: 2013-11-16 00:14
Weix1992 发表于 2013-11-15 22:09
比如的结构是这样test\a\b,当进入test后拿到所有文件还需要判断拿到的文件是不是文件夹,如果是就进入文 ...

我先判断他能不能删除,能就删掉,如果不能就进入文件夹里面,再次调用那个方法,我这样有错吗

作者: 小马过河    时间: 2013-11-16 02:01
童鞋,在退出循环的外层,补上file.delete()
作者: 小马过河    时间: 2013-11-16 02:03
public static void fileD(File file){
                File [] arrayFile = file.listFiles();
                for (File fd : arrayFile) {
                        if (fd.isDirectory()) {
                                fileD(fd);
                        }
                        else {
                                System.out.println(fd.getName()+"***"+fd.delete());//这句删除目录内文件。
                        }
                }
                System.out.println(file.delete());//补充下,这句就是删除目录本身的关键。
        }




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