在安卓系统中如何从内部存储中删除文件夹?

27
如何从内部存储中删除包含文件夹和文件的文件夹? 文件夹包含以下子目录。
folder
|_________  C2 (folder)
             |________1 (folder)
                      |________1.gif
                      |________2.gif
                      |________3.gif
                      |________4.gif
             |________2 (folder)
                      |________1.gif
                      |________2.gif
                      |________3.gif
                      |________4.gif
             |________3 (folder)
                      |________1.gif
                      |________2.gif
                      |________3.gif
                      |________4.gif
             |________4 (folder)
                      |________1.gif
                      |________2.gif
                      |________3.gif
                      |________4.gif
             |________5 (folder)
                      |________1.gif
                      |________2.gif
                      |________3.gif
                      |________4.gif

|_________  C2.xml (file)

我想删除文件夹及其内所有文件。

fil.delete();

System.out.println("boolean =>" + fil.delete());

但是上面的代码显示为false。请帮忙。


请查看此链接 > http://stackoverflow.com/questions/8311751/delete-databases-folder-internal-storage - Nirav Ranpara
请查看此链接...http://stackoverflow.com/questions/10361145/how-to-delete-all-the-files-from-sd-card-in-android - Mehul Ranpara
我已经阅读了上面的链接,但它们只展示了如何删除文件而不是文件夹。 - duggu
请遵循teedyay在此链接中的答案https://dev59.com/32445IYBdhLWcg3wR4RN - Kalai.G
感谢大家,现在我的问题得到解决了,但还是要感谢 Nirav、Mehul 和 Kalai 的指导。 - duggu
5个回答

89

看这个。

public void deleteRecursive(File fileOrDirectory) {

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

   fileOrDirectory.delete();
 }

这里有一个关于如何删除整个文件夹及其内容的问题的解释:How to delete a whole folder and content?


8

如果子文件夹中包含任何文件,则无法删除根文件夹。因此,您需要首先删除每个子文件,然后才能删除该文件夹。

您的代码是有效的,我只是进行了更新:

 boolean deleted = mypath.delete();

例如,mypath 是您的文件目录。


4

首先,您不能删除Root文件夹,因为它是系统文件夹。如果您在手机上手动删除它,它将删除该文件夹的内容,但不会删除Root文件夹本身。您可以使用以下方法删除其内容:

private void DeleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
        for (File child : fileOrDirectory.listFiles())
        {
            child.delete();
            DeleteRecursive(child);
        }

    fileOrDirectory.delete();
}

如果我的文件夹中只有一个文件,那么这段代码可以工作,但是如果我的文件夹中包含文件夹(这个文件夹又包含另一个文件夹和最后一个文件夹中还有一些文件)和文件,那么就会出问题。 - duggu

1

使用Apache Commons IO,只需一行代码。

FileUtils.deleteDirectory(getAlbumStorageDir(directoryName));

0

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