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

33

我使用这段代码来删除所有文件:

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());
    }
}

Files[j]是文件夹的情况下,它将删除错误信息。

我想要删除文件夹以及其所有子文件。
我该如何修改?


1
可能重复:https://dev59.com/jm865IYBdhLWcg3whO7E - Azodious
15个回答

74

直接的 - Jaber Shabeek
2
如果读取文件时出现I/O错误,那么fileOrDirectory.listFiles()可能返回null。这在文档中已经说明:developer.android.com/reference/java/io/File.html#listFiles()。 - HB.

44

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

File dir = new File("root path");
FileUtils.deleteDirectory(dir);
记住这将会删除包含目录。
在gradle文件中添加这行代码以使用Apache。
compile 'org.apache.commons:commons-io:1.3.2'  

8
编译 'org.apache.commons:commons-io:1.3.2' //用于Gradle导入 - salcosand

18
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.

你可以像这样编写方法:删除dir目录下的所有文件和子目录。如果所有删除操作都成功,则返回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();
}

8

如果storageDir是一个目录

for(File tempFile : storageDir.listFiles()) {
    tempFile.delete();
}

2
如果要删除的目录中存在任何非空目录,则此方法将无法正常工作。 - Lesleh

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);
}

如果你想删除文件夹本身(不必为空)。该方法也可用于文件。 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);
}

最好在你的回答中格式化代码片段,而不仅仅是提供链接。此外,请尽量详细解释你所提供的答案。 - Zizouz212
不要忘记将commons io jar添加到您的项目中。apache commons jar链接在此处 - Shashank

4
你可以这样检查:

代码示例:

for(j = 0; j < Files.length; j++) {

    if(file.isDirectory()){
        for(File f : file.listFiles()){
        System.out.println(Files[j].getAbsolutePath());
        System.out.println(Files[j].delete());
    }
    else {
        System.out.println(Files[j].getAbsolutePath());
        System.out.println(Files[j].delete());
    }
}

4

您可以尝试使用以下代码来删除文件和子文件

public void deleteFile(File f){
String[] flist=f.list();
for(int i=0;i<flist.length;i++){
    System.out.println(" "+f.getAbsolutePath());
    File temp=new File(f.getAbsolutePath()+"/"+flist[i]);
    if(temp.isDirectory()){
       deleteFile(temp) ;
       temp.delete();
    }else{
    temp.delete();
    }

3

从 Kotlin 1.5.31 开始,存在一个 Kotlin 扩展方法,其工作方式如下:

val resultsOfDeleteOperation = File("<Full path to folder>").deleteRecursively()

根据文档:

删除该文件及其所有子文件。请注意,如果此操作失败,则可能只删除了部分文件。 返回: 如果成功删除文件或目录,则返回true,否则返回false。


1

// 删除文件夹及其内容

public static void DeleteFolder(File folder)
{
    try
    {
        FileUtils.deleteDirectory(folder);
    } catch (Exception ex)
    {
        Log.e(" Failed delete folder: ", ex.getMessage());
    }
}

// 仅删除文件夹内容

public static void DeleteFolderContents(File folder)
{
    try
    {
        FileUtils.cleanDirectory(folder);
    } catch (Exception ex)
    {
        Log.e(" Failed delete folder contents: ", ex.getMessage());
    }
}

文档:org.apache.commons.io.FileUtils.cleanDirectory


1
作为 Kotlin 扩展函数,你可以这样做:
fun File.deleteDirectoryFiles(){
    this.listFiles().forEach {
        if(it.isDirectory){
            it.deleteDirectoryFiles()
        }else{
            it.delete()
        }
    }

    this.delete()
}

然后你可以这样做:

然后你就可以这样做

file.deleteDirectoryFiles()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接