2012-01-10 15 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

+1

犯罪は意図されていませんが、テキストには皮肉が現れません。 :D – st0le

答えて

9

....あなたはこのことについて尋ねている願っています。ファイルの削除に時間がかかり過ぎると、システムは「アプリケーションが応答していません」というエラーを表示します。これは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(); 
} 
関連する問題