如何删除Android上一个文件夹中的所有文件和文件夹

bri*_*ian 26 java file-io android

我使用此代码删除所有文件:

File root = new File("root path");
File[] Files = root.listFiles();
if(Files != null) {
    int j;
    for(j = 0; j < Files.length; j++) {
        System.out.println(Files[j].getAbsolutePath());
        System.out.println(Files[j].delete());
    }
}
Run Code Online (Sandbox Code Playgroud)

它将删除false Files[j]文件夹的位置.

我想删除文件夹及其所有子文件.
我怎么修改这个?

dug*_*ggu 59

检查此链接还从android中的内部存储中删除文件夹?.

void deleteRecursive(File fileOrDirectory) {

    if (fileOrDirectory.isDirectory())
        for (File child : fileOrDirectory.listFiles())
            deleteRecursive(child);

    fileOrDirectory.delete();

}
Run Code Online (Sandbox Code Playgroud)

  • 如果读取文件时出现 I/O 错误,`fileOrDirectory.listFiles()` 可能会返回 null。文档中对此进行了说明:developer.android.com/reference/java/io/File.html#listFiles() (2认同)

Les*_*leh 33

最简单的方法是使用Apache Commons IO库中的FileUtils.deleteDirectory.

File dir = new File("root path");
FileUtils.deleteDirectory(dir);
Run Code Online (Sandbox Code Playgroud)

请记住,这也将删除包含目录.

在gradle文件中添加此行以获得Apache

compile 'org.apache.commons:commons-io:1.3.2'  
Run Code Online (Sandbox Code Playgroud)

  • 编译'org.apache.commons:commons-io:1.3.2'//用于gradle导入 (8认同)
  • 它不适用于较低的api级别。 (3认同)

Ach*_*Jha 16

File file = new File("C:\\A\\B");        
    String[] myFiles;      

     myFiles = file.list();  
     for (int i=0; i<myFiles.length; i++) {  
         File myFile = new File(file, myFiles[i]);   
         myFile.delete();  
     }  
B.delete();// deleting directory.
Run Code Online (Sandbox Code Playgroud)

您可以这样编写方法:删除dir.Returns下的所有文件和子目录如果所有删除都成功,则为true.如果删除失败,则该方法将停止尝试删除并返回false.

public static boolean deleteDir(File dir) {
    if (dir.isDirectory()) {
        String[] children = dir.list();
        for (int i=0; i<children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    // The directory is now empty so delete it
    return dir.delete();
}
Run Code Online (Sandbox Code Playgroud)


erg*_*cak 6

如果storageDir是一个目录

for(File tempFile : storageDir.listFiles()) {
    tempFile.delete();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果要删除的目录中有任何非空目录,则此方法将无效。 (2认同)

Sha*_*ank 5

对于您的情况,这非常有效 http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#cleanDirectory(java.io.File)

File dir = new File("dir_path");
if(dir.exists() && dir.isDirectory()) {
    FileUtils.cleanDirectory(dir);
}
Run Code Online (Sandbox Code Playgroud)

如果你想删除文件夹本身。(它不必为空)。也可以用于文件。

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#forceDelete(java.io.File)

File dir = new File("dir_path");
if(dir.exists()) {
    FileUtils.forceDelete(dir);
}
Run Code Online (Sandbox Code Playgroud)