删除 SD 卡上的文件夹

Posted

技术标签:

【中文标题】删除 SD 卡上的文件夹【英文标题】:Delete a folder on SD card 【发布时间】:2011-08-07 18:41:36 【问题描述】:

我尝试了File.delete(),但它不起作用。 如何删除 SD 卡上的目录?

我正在使用 android 2.1。

【问题讨论】:

How to delete a whole folder and content?的可能重复 【参考方案1】:

它对我有用:

Add in manifest-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

private boolean deleteDirectory(File path) 
        if( path.exists() ) 
            File[] files = path.listFiles();
            if (files == null) 
                return false;
            
            for(File file : files) 
                if(file.isDirectory()) 
                    deleteDirectory(file);
                
                else 
                file.delete();
                
            
        
        return path.exists()?path.delete():false;
    

【讨论】:

正确的做法是将file.delete 替换为boolean wasDeleted = file.delete(); 并低于调用if (wasDeleted) Log.i("Deleted ", "successfully");。我也同意最好使用 for each 循环 (for(File file : files)) 而不是接受的答案 (for(int i=0; i&lt;files.length; i++))。【参考方案2】:

目录在删除之前必须为空。您必须递归清空并删除树中的所有目录:

boolean delete(File file) 
    if (file.isDirectory()) 
        File[] files = file.listFiles();
        if (files != null)
            for (File f : files) delete(f);
    
    return file.delete();

更新:

看起来像file.isDirectory() == (file.listFiles() == null),但file.listFiles()file.isDirectory() == false 时记录“fail readDirectory() errno=20”。

【讨论】:

【参考方案3】:

它对我来说很好,我希望它对你有用。

File dir = new File(Environment.getExternalStorageDirectory()+"DirName"); 
if (dir.isDirectory()) 
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) 
            new File(dir, children[i]).delete();
        
    

【讨论】:

dir.list 可以返回 null,因此在循环中调用 children.length 而不检查 children 是否为 null 会引发异常。【参考方案4】:

https://***.com/a/16411911/2397275

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

在 AndroidManifest.xml 文件中

【讨论】:

【参考方案5】:

在删除目录本身之前,您必须让所有目录为空,请参阅here

在 Android 中,您还应该拥有适当的权限 - 您的清单中的 WRITE_EXTERNAL_STORAGE

编辑:为方便起见,我在这里复制了代码,但它仍然来自上面的链接

public static boolean deleteDirectory(File path) 
    if( path.exists() ) 
      File[] files = path.listFiles();
      if (files == null) 
          return true;
      
      for(int i=0; i<files.length; i++) 
         if(files[i].isDirectory()) 
           deleteDirectory(files[i]);
         
         else 
           files[i].delete();
         
      
    
    return( path.delete() );
  

【讨论】:

我尝试删除文件夹中的文件,但 Logcat 显示 unable to unlink '/geo1.xml': Read-only file system (errno=30)。我在清单中添加了WRITE_EXTERNAL_STORAGE 权限。 我认为/geo1.xml 不在 SD 卡中,而是在 root (/) 中。你确定你指向的是正确的文件吗? 不,/geo.xml 在我试图删除的文件夹中,但我在代码中遗漏了一些内容。它现在工作正常。谢谢。 :) 您需要在 for 循环周围添加一个 if (files != null) 测试,否则如果 files 为 null,您将在第一次评估 for 循环时抛出异常。 为什么没有文件返回true?这样文件夹就不会被删除。

以上是关于删除 SD 卡上的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Arduino - 将高分写入 SD 卡上的 SQLite 数据库

sd卡删除文件了能恢复吗?恢复的具体方法

如何将 SD 卡上的 3gp 文件上传到服务器?

Android:从 sd 卡上的特定位置获取缩略图

Android Dev:从存储在 SD 卡上的临时文件创建位图,设置 ImageView,然后将其存储在本地

构建 AOSP:如何在 SD 卡上包含文件?