2011-04-18 92 views
32

我试过File.delete()但它不起作用。 如何删除SD卡上的目录?删除SD卡上的文件夹

我正在使用Android 2.1。

+0

的可能的复制[?如何删除整个文件夹和内容](https://stackoverflow.com/questions/4943629/how-to-delete - 整个文件夹和内容) – bummi 2017-12-04 12:14:11

回答

98

你必须有所有的目录中删除目录本身之前空,看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()); 
    } 
+0

我试图删除文件夹中的文件,但Logcat显示'无法取消链接'/geo1.xml':只读文件系统(errno = 30)'。我已在清单中添加了'WRITE_EXTERNAL_STORAGE'权限。 – Greenhorn 2011-04-18 10:40:12

+0

我认为'/ geo1.xml'不在SD卡中,而是在根目录下('/')。你确定你指的是正确的文件吗? – MByD 2011-04-18 10:46:15

+0

不,'/ geo.xml'位于我试图删除的文件夹中,但我在代码中丢失了一些东西。它的工作现在很好。谢谢。 :) – Greenhorn 2011-04-18 10:55:44

0

目录必须在他们被删除之前被清空。你必须递归空,并删除所有的目录树:

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()日志 “fail readDirectory() errno=20” 时file.isDirectory() == false

0

它对我来说很好,我希望它能为你工作。

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

dir.list可以返回null,因此在循环中调用children.length而不检查孩子是否为null可能会引发异常。 – 2015-07-01 11:15:55

0

它的工作对我来说:

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