如何删除Java中的目录内容?

lol*_*ola 77 java file-io delete-directory

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

我用了:

final File[] files = outputFolder.listFiles();
files.delete();
Run Code Online (Sandbox Code Playgroud)

但是这还没有删除目录.

NCo*_*ode 117

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

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();
}
Run Code Online (Sandbox Code Playgroud)

然后打电话

deleteFolder(outputFolder);
Run Code Online (Sandbox Code Playgroud)

  • 如果其中一个文件是非空目录,则无法工作.您必须递归删除目录内容.如果(f.isDirectory())myDelete(F) (3认同)

DHR*_*SAL 93

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

FileUtils.deleteDirectory(<File object of directory>);
Run Code Online (Sandbox Code Playgroud)

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

容易派:)

  • 差不多了!问题是如何删除文件夹的内容(不是过滤器本身) - commons-io也有一个方法:FileUtils.cleanDirectory(File); (54认同)
  • 我猜你的意思是commons-io方法:org.apache.commons.io.FileUtils.deleteDirectory(File) (14认同)

Boz*_*zho 10

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

有第三方库有很多常用的实用程序,包括为您执行此操作的实用程序:

  • 不幸的是,在版本11.0中,[`Files.deleteRecursively()`已从Guava中删除](http://stackoverflow.com/questions/8320376/why-is-files-deletedirectorycontents-deprecated-in-guava). (10认同)

sol*_*dil 7

你不能删除阵列!这应该更好:

for (File f : files) f.delete();
Run Code Online (Sandbox Code Playgroud)

但如果文件夹不为空,它将无法工作.对于这种情况,您需要以递归方式下降到文件夹层次结构中并删除所有内容.是的,遗憾的是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();
}
Run Code Online (Sandbox Code Playgroud)