2012-01-10 60 views
2

我有一個包含大量文件的目錄。我想刪除整個目錄以及其中的所有文件。刪除Android中的文件

我希望我的代碼等到該目錄中的每個文件(包括目錄本身)在下一個命令執行之前被刪除。

我該如何等待? 我的代碼是

public void wipeMemoryCard() 
    { 
     File deleteMatchingFile = new File(Environment 
       .getExternalStorageDirectory().toString()); 
     try { 
      filenames = deleteMatchingFile.listFiles(); 
      if (filenames != null && filenames.length > 0) 
      { 
       content = true; 
       for (File tempFile : filenames) 
       { 
        if (tempFile.isDirectory()) 
        { 
         wipeDirectory(tempFile.toString()); 
         tempFile.delete(); 

        } 
        else 
        {      
         File file = new File(tempFile.getAbsolutePath()); 
         file.delete(); 
        } 
       } 
      } 
      else 
      { 

       deleteMatchingFile.delete(); 
       Toast("No files to Delete"); 
      } 
     } 

     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     if(content == true) 
     { 
       if (filenames == null && filenames.length == 0) 
       { 
        Toast("Files Deleted"); 
       } 
     } 
    } 

    private static void wipeDirectory(String name) { 
     File directoryFile = new File(name); 
     File[] filenames = directoryFile.listFiles(); 
     if (filenames != null && filenames.length > 0) 
     { 
      for (File tempFile : filenames) 
      { 
       if (tempFile.isDirectory()) 
       { 
        wipeDirectory(tempFile.toString()); 
        tempFile.delete(); 
       } 
       else 
       { 
        File file = new File(tempFile.getAbsolutePath()); 
        file.delete(); 
       } 
      } 
     } else 
     { 
      directoryFile.delete(); 
     } 
    } 
+0

謝謝您的意見。這是一個測試應用程序。 – Fresher 2012-01-10 08:33:44

+1

沒有違法意圖,諷刺不出文字。 :d – st0le 2012-01-10 08:45:25

回答

9

在UI線程你應該無法運行此。如果文件刪除時間過長,系統將彈出「應用程序未響應」錯誤。你可以用AsyncTask來做到這一點。該文檔顯示了一個簡單的方法來使用它來彈出「請稍候」對話框,在後臺執行耗時的工作,然後關閉對話框。

P.S.你的方法名稱有點嚇人! :)

0
public static void DeleteRecursive(String filename) { 
    File file = new File(filename); 
    if (!file.exists()) 
     return; 
    if (!file.isDirectory()) { 
     file.delete(); 
     return; 
    } 

    String[] files = file.list(); 
    for (int i = 0; i < files.length; i++) { 

     DeleteRecursive(filename + "/" + files[i]); 
    } 
    file.delete(); 
}