黑马程序员技术交流社区

标题: 递归删除多级文件 [打印本页]

作者: Piaget    时间: 2015-2-9 21:27
标题: 递归删除多级文件
本帖最后由 Piaget 于 2015-2-24 13:24 编辑

  1. <div class="blockcode"><blockquote>import java.io.File;

  2. public class TestDigui
  3. {
  4.         /**
  5.          * 删除多级文件
  6.          */
  7.         public static void main(String[] args)
  8.         {
  9.                 deleDir("F:\\java");
  10.         }

  11.         public static void deleDir(String path)
  12.         {
  13.                 File file = new File(path);
  14.                 String[] names = file.list();
  15.                 for (String string : names)
  16.                 {

  17.                         System.out.println(string);
  18.                         String newpath = path + "\\" + string;
  19.                         File newFile = new File(newpath);
  20.                         if (newFile.isDirectory())
  21.                         {
  22.                                 deleDir(newFile.getPath());
  23.                         }
  24. //                        newFile.delete();//删除文件
  25.                        
  26.                 }
  27.         }
  28. }
复制代码

注释的部分是第一次写的时候没考虑周到,发现删除完剩余了多级空文件夹。分析发现,如果有else,当一个文件夹是空的,递归一下,下次得不到里面的内容,也就不能进入遍历。于是if操作结束,但是不会进入else。最后删除不了这个空文件夹。
而去掉else,当这个文件夹是空的,结束if语句会向下执行删除操作。空文件夹就删除了。

作者: 邓士林    时间: 2015-2-9 21:54
:):):):):)
作者: 梁小刀11    时间: 2015-2-10 00:13
1,这个应该有个FileNotFoundExpection
2, 遍历出来的String是个绝对路径,递归体的中调用自身出错.

作者: 边晓炎    时间: 2015-2-10 00:25
没看到删除!出现空文件夹的情况只需要你在递归后file.delete就删除了!
作者: huangchunwei    时间: 2015-2-10 09:37
学习了。。。:):):)
作者: cly成子    时间: 2015-2-10 09:49
有点深!待学习!受教了!
作者: 瞿乐    时间: 2015-2-10 11:11
本帖最后由 瞿乐 于 2015-2-10 11:27 编辑

我这里有个逻辑看起来简单些的。
  1.         public static void deleDir(File file){
  2.                 final File[] fs = file.listFiles();
  3.                
  4.                 if(file.isFile()||fs==null||fs.length==0){
  5.                         System.out.println("del::"+file.getAbsolutePath());
  6.                         file.delete();
  7.                 }else{
  8.                         for(File f: fs){
  9.                                 deleDir(f);
  10.                                 System.out.println(f.getAbsolutePath());
  11.                                 f.delete();
  12.                         }
  13.                 }
  14.         }
复制代码
但是还有个bug。
作者: 瞿乐    时间: 2015-2-10 11:26
瞿乐 发表于 2015-2-10 11:11
我这里有个逻辑看起来简单些的。

但是还有个bug。
作者: 俺做android开发    时间: 2015-2-10 11:28
顶你,给哦黑马币




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