至余
2016-11-14 10:58
采纳率: 100%
浏览 1.3k
已采纳

我用java写的深层删除D盘下所有空文件夹代码为什么老是报错呢?

public Class DeleteDir{
public static void main(String[]args){
File dir = new File("D:\");
deletedir(dir);
}

    public static void deletedir(File dir){
    File[] files = dir.listFiles();
        if(files.length==0)
                dir.delete;
        else
            for(File file:files){
                    if(file.isDirectory())
                            deletedir(file);
                    else
                            continue;
            }
    }

}

图片说明
功能上确实把一些空文件夹删除了,我也没去看有没有全部删除,但是运行一段时间之后会在判断数组长度是否为0那里报错。这是为什么呢?是因为系统文件或其他什么的权限不够吗?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • _1_1_7_ 2016-11-15 09:16
    已采纳

    多看看api文档,就知道了

     listFiles
    public File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。 
    如果此抽象路径名并不表示一个目录,则此方法将返回 null。否则,为目录中的每个文件或目录返回一个 File 对象数组。表示目录本身及其父目录的路径名不包括在结果中。得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String) 构造方法构造。所以,如果此路径名是绝对路径名,则得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,则得到的每个路径名都是相对于同一目录的路径名。 
    
    不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。 
    
    
    返回:
    表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组。如果目录为空,则数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。 
    
      public static void deletedir(File dir){
        File[] files = dir.listFiles();
            if(files==null)return;//如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
            if(files.length==0)//空文件夹
                    dir.delete;
            else
                for(File file:files){
                        if(file.isDirectory())
                                delitedir(file);
                        else
                                continue;
                }
        }
    
    已采纳该答案
    打赏 评论
  • Simon站起来 2016-11-14 11:04

    不是,报错原因是有种场景,当你的目录是空目录时File[] files = dir.listFiles();得到的files为null
    那你的files.length就会报空指针。我写的一个遍历出某目录中所有文件名,和你遇到相识的问题,我的解决方案是
    //如果目录为空目录则要return,否则会空指针异常

    if (files == null) {

    return;

    }
    博客地址:
    你可以参考下

    打赏 评论

相关推荐 更多相似问题