黑马程序员技术交流社区

标题: File删除 [打印本页]

作者: 潘才新    时间: 2013-8-6 16:39
标题: File删除
请教各路高手~代码中怎么修改,想要删除不成功返回"删除失败"但我这样写的话
之前文件夹被删除之后第二次删除执行else不到就报错了。怎么样修改可以进行判断~
  1. package day02;

  2. import java.io.File;
  3. public class RemoveDir {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                 // TODO Auto-generated method stub
  9.                 File file=new File("c:\\asd");
  10.                 if(removeDir(file)){
  11.                         System.out.println("删除成功");
  12.                 }
  13.                 else{
  14.                         System.out.println("删除失败");
  15.                 }
  16.         }
  17.         public static boolean removeDir(File dir){
  18.                 System.out.println(dir);
  19.                 File[] files=dir.listFiles();
  20.                 for(int x=0;x<files.length;x++){
  21.                         if(files[x].isDirectory()&&!files[x].isHidden()){
  22.                                 removeDir(files[x]);
  23.                         }
  24.                         else{
  25.                                 files[x].delete();
  26.                         }
  27.                 }
  28.                 return dir.delete();
  29.         }

  30. }
复制代码

2.jpg (110.81 KB, 下载次数: 7)

2.jpg

作者: lijia113    时间: 2013-8-6 16:59
你在删除前要加个判断,判断这个文件存不存在
用file.exists().当存在这个文件时,你就调用你的RemoveDir方法,不存在是就直接给出提示。这样就解决问题了
作者: kangxiaoning    时间: 2013-8-6 18:41
貌似是空指针异常,说明你要用到的东西可能不存在,所以你要想想你都操作了什么,这里只有文件夹,所以你操作的文件夹可能不存在吧,要么判断一下,要么把异常抛出去。
作者: 天地有我    时间: 2013-8-6 20:32
本帖最后由 天地有我 于 2013-8-6 20:36 编辑

给你修改了一下,希望能满足你的要求。

import java.io.File;

public class RemoveDir
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
                File file = new File("c:\\asd");
                if (removeDir(file))
                {
                        System.out.println("删除成功");
                }
                else
                {
                        System.out.println("删除失败");
                }
        }

        public static boolean removeDir(File dir)
        {
                System.out.println(dir);
                if (!dir.exists())
                {
                        return false;
                }
                else
                {
                        if (dir.isFile())
                        {
                                return dir.delete();
                        }
                        else
                        {
                                File[] files = dir.listFiles();
                                if (files.length == 0)
                                {
                                        return dir.delete();
                                }
                                else
                                {
                                        for (int x = 0; x < files.length; x++)
                                        {
                                                if (files[x].isDirectory() && !files[x].isHidden())
                                                {
                                                        removeDir(files[x]);
                                                }
                                                else
                                                {
                                                        files[x].delete();
                                                }
                                        }
                                        return dir.delete();
                                }

                        }
                }

        }

}
作者: 潘才新    时间: 2013-8-6 20:49
感谢朋友们的解答!!!{:soso_e116:}
作者: 施大勇    时间: 2013-8-6 20:49
21行前应该有一个判断语句,如果给定的文件不为空,才可以列出该文件中的内容。
若为空则直接返回false;
if(dir!=null){这里是你的主体语句;return dir.delete();  }else{return false;}

作者: 赵国刚    时间: 2013-8-10 07:54
  删除前要加个判断(这应该是严谨性的不足,开始的时候都这样,总结的多了就好了),判断这个文件存不存在
用file.exists().当存在这个文件时,你就调用你的RemoveDir方法,不存在是就直接给出提示或则直接返回false;。




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