如何在 Java 中删除目录内容? [复制]

Posted

技术标签:

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

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

我用过:

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

但这并没有删除目录。

【问题讨论】:

它甚至可以编译吗?你在数组上调用 delete。 【参考方案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】:

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

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

阿帕奇commons-langFileUtils.forceDelete(..) guavaFiles.deleteRecursively(..)

【讨论】:

不幸的是,Files.deleteRecursively() was removed from Guava 在 11.0 版中。 FileUtils.forceDelete() 属于 commons-io。【参考方案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

【讨论】:

以上是关于如何在 Java 中删除目录内容? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何 grep 字符串的目录,将其重写为其他内容并保存在 bash 中? [复制]

java中 如何在一个数组中删除里面的元素

java 如何把一个目录下的所有.java文件复制到另一个目录下,并保持其结构不变

java FTPClient如何删除远程服务器端的文件夹及其子文件夹及其内容!

如何在java中将文本添加到文本文件中? [复制]

如何写个脚本将Linux目录下的几个文件夹定时复制