4

多くのファイルを含むディレクトリがあります。ディレクトリ全体とその中のすべてのファイルを削除したい。

次のコマンドが実行される前に、そのディレクトリ内のすべてのファイル (ディレクトリ自体を含む) が削除されるまで、コードを待機させたいと考えています。

どうやって待つの?私のコードは

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

3 に答える 3

12

これを UI スレッドで実行しないでください。ファイルの削除に時間がかかりすぎると、システムは「アプリケーションが応答しません」というエラーを表示します。これはAsyncTaskで行うことができます。ドキュメントには、これを使用して「お待ちください」ダイアログをポップアップし、バックグラウンドで時間のかかる作業を行ってから、ダイアログを閉じる簡単な方法が示されています。

PSあなたのメソッド名はちょっと怖いです! :)

于 2012-01-10T05:59:20.530 に答える
1

これにはHandlerを使用する必要があるため、すべてのファイルが削除されると、次に実行するタスクのメッセージが Handler に送信されます。

ハンドラーについては、このリンクを参照してください。

http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html

あなたがこれについて尋ねていることを願っています....

于 2012-01-10T05:57:30.133 に答える
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();
}
于 2012-01-10T06:41:08.890 に答える