黑马程序员技术交流社区

标题: file [打印本页]

作者: 罗宵    时间: 2012-7-27 13:17
标题: file
/*
* 指定目录,删除该目录下所有的文件.(也包括目录)
* d:\\test
*/
public class FileTest3 {
        public static void main(String[] args) {
                File file = new File("d:\\test");
                deleteAll(file);
        }

        public static void deleteAll(File dir) {  //aa  dd
                File[] files = dir.listFiles();

                for (File file : files) {
                        if (file.isDirectory()) {
                                deleteAll(file);
                        } else {
                                System.out.println(file.getName() + ":" + file.delete());
                        }
                }
               
                System.out.println(dir.getName() + ":" + dir.delete());  
        }
}
这个delete()用在输出语句里面怎么也可以删除文件。还有就是文件夹是怎么删除掉的。
作者: 王志明    时间: 2012-7-27 13:29
1.因为delete()会返回一个boolean值,表示文件或目录是否删除成功,所以delete()可以放到输出语句里
2.delete()方法可以删除文件和目录,文件和目录的删除方式肯定不同,但是delete()内部已经把这个问题解决了,
当你调用delete()时,它内部肯定会判断你删除的是文件还是目录,再去调用底层相应的实现方法,对于我们来说,
不管你删除的是文件还是目录,方法都是一样的,调用delete()就可以了。

作者: 乐峰    时间: 2012-7-27 13:34
file类里面的方法delete()的作用是:删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。所以等把文件都删空后,文件夹以及目录都会被删除。
输出语句覆盖了object类的toString()方法,所以在输出语句里面可以删除文件。
作者: 吴小东    时间: 2012-7-27 13:46
这个题目只要把思路搞清楚了,迭代的原来弄懂了就很简单的了。
在你的程序中
System.out.println(file.getName() + ":" + file.delete());  这一句就是删除文件夹中的文件
System.out.println(dir.getName() + ":" + dir.delete());   这一句就是删除文件夹

下面这个例子希望可以帮组你理解,
  1. public void deleteFiles(File file)
  2.         {
  3.                 if (file.isFile())
  4.                 {
  5.                         throw new RuntimeException("你输入的是一个文件,不符合程序设定,请检查!");
  6.                 }
  7.                 if (file.isDirectory())
  8.                 {
  9.                
  10.                         File[] files = file.listFiles();
  11.                         for (File f : files)
  12.                         {
  13.                                 //判断如果是文件,则删除该文件
  14.                                 if (f.isFile())
  15.                                 {
  16.                                         f.delete();
  17.                                 }
  18.                                 //判断如果是文件件,而且里面内容为空,则删除该文件夹
  19.                                 if (f.isDirectory()&&(f.listFiles().length == 0))
  20.                                 {
  21.                                         f.delete();
  22.                                 }
  23.                                 //判断如果是文件夹,而且里面还包含有文件或者文件夹,则对该文件夹进行迭代删除
  24.                                 if (f.isDirectory()&&(f.listFiles().length != 0))
  25.                                 {
  26.                                         deleteFiles(f);
  27.                                         //迭代完成之后删除该目录
  28.                                         f.delete();
  29.                                 }
  30.                         }
  31.                        
  32.                 }
  33.         }
复制代码

作者: 王程    时间: 2012-7-27 17:43
delete()只要调用了这个方法,无论是在输出语句中,还是在判断或其他语句中,只要程序已经读到了这一行代码就会执行
public static void deleteAll(File dir) {  
                File[] files = dir.listFiles();
                for (File file : files) {
                        if (file.isDirectory()) {//-->1
                                deleteAll(file);//-->2
                        } else {
                                System.out.println(file.getName() + ":" + file.delete());
                        }
                }
               
                System.out.println(dir.getName() + ":" + dir.delete());  //-->3
        }
dir是一个文件夹,先遍历文件夹中的内容,依次判断每一个文件对象,例如第一个文件对象名为file1,则位置1先判断file1是不是文件夹,如果是文件夹,位置2则继续遍历文件夹file1里面的内容(判断是否是文件夹,是则删除,不是继续遍历),若不是,则输出文件夹的名称然后删除文件夹,当dir文件夹中所有文件对象都遍历完后,3位置就执行代码先输出dir文件夹的名称然后删除dir文件夹。这个方法主要就是采用了递归的思想,只要满足条件,就调用自身方法。





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