2011-04-18 87 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; 
    }