【问题标题】:How to delete directory content in Java? [duplicate]如何在 Java 中删除目录内容? [复制]
【发布时间】:2011-12-07 18:12:50
【问题描述】:

枚举目录后,我现在需要删除所有文件。

我用过:

final File[] files = outputFolder.listFiles();
files.delete();

但这并没有删除目录。

【问题讨论】:

  • 它甚至可以编译吗?你在数组上调用 delete。

标签: java file-io delete-directory


【解决方案1】:

您必须为每个文件执行此操作:

public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
    if(files!=null) { //some JVMs return null for empty dirs
        for(File f: files) {
            if(f.isDirectory()) {
                deleteFolder(f);
            } else {
                f.delete();
            }
        }
    }
    folder.delete();
}

然后调用

deleteFolder(outputFolder);

【讨论】:

  • +1。但是,最后一行应该是 outputFolder.delete() 而不是 output.delete()
  • 我试过了,但是当我打开浏览器时,文件夹仍然在这里并且包含所有文件...
  • 如果其中一个文件是非空目录,则不会工作。您必须递归地删除目录内容。 if(f.isDirectory())myDelete(f)
  • 你说得对,改了代码
  • 我在 for(File f: files) { 上得到了 nullPointerExcpetion
【解决方案2】:

删除包含文件的文件夹,无需循环或递归搜索。可以直接使用:

FileUtils.deleteDirectory(<File object of directory>);

此功能将目录删除文件夹及其中的所有文件。

【讨论】:

  • 我猜你的意思是commons-io方法:org.apache.commons.io.FileUtils.deleteDirectory(File)
  • 快到了!问题是如何删除文件夹的内容(不是过滤器本身) - commons-io 也有一个方法:FileUtils.cleanDirectory(File);
  • 有没有类似的方法只删除文件夹内的文件而不删除文件夹本身??
  • @Lucy 检查上面的评论。您可以使用 Daniel 提到的 FileUtils.cleanDirectory(File) 方法
【解决方案3】:

在删除之前必须从目录中删除所有文件。

有些第三方库有很多常用的实用程序,包括那些为您做这些的:

【讨论】:

【解决方案4】:

你不能删除数组!这应该会更好:

for (File f : files) f.delete();

但如果文件夹不为空,它将不起作用。对于这种情况,您需要递归地进入文件夹层次结构并删除所有内容。是的,很遗憾Java默认不能做到这一点......

【讨论】:

    【解决方案5】:

    这是在没有库的情况下解决问题的一种可能解决方案:

    public static boolean delete(File file) {
    
        File[] flist = null;
    
        if(file == null){
            return false;
        }
    
        if (file.isFile()) {
            return file.delete();
        }
    
        if (!file.isDirectory()) {
            return false;
        }
    
        flist = file.listFiles();
        if (flist != null && flist.length > 0) {
            for (File f : flist) {
                if (!delete(f)) {
                    return false;
                }
            }
        }
    
        return file.delete();
    }
    

    【讨论】:

    • 此代码块:“if (!delete(f)) { return false; }”可以替换为“return delete(f);”不能吗?
    【解决方案6】:

    您不能删除 File 数组。正如所有其他答案所暗示的那样,您必须在删除文件夹之前删除每个单独的文件...

    final File[] files = outputFolder.listFiles();
    for (File f: files) f.delete();
    outputFolder.delete();
    

    【讨论】:

      【解决方案7】:

      将 FileUtils 与 FileUtils.deleteDirectory() 一起使用;

      【讨论】:

      • 最好提到FileUtils 是 Apache Commons IO 的一部分。
      【解决方案8】:
      for(File f : files) {
          f.delete();
      }    
      files.delete(); // will work
      

      【讨论】:

        猜你喜欢
        • 2011-07-24
        • 1970-01-01
        • 2011-03-21
        • 2011-01-13
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多