Удаление файлов в Android - PullRequest
       14

Удаление файлов в Android

4 голосов
/ 10 января 2012

У меня есть каталог, который содержит много файлов.Я хочу удалить весь каталог, а также все файлы в нем.

Я хочу, чтобы мой код ожидал удаления всех файлов в этом каталоге (включая сам каталог), прежде чем будет выполнена следующая команда.

Как мне ждать?Мой код

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

Ответы [ 3 ]

10 голосов
/ 10 января 2012

Вы не должны запускать это в потоке пользовательского интерфейса. Если удаление файла занимает слишком много времени, система выдаст ошибку «Приложение не отвечает». Вы можете сделать это с помощью AsyncTask . В документации показан простой способ использования этого для вызова диалогового окна «пожалуйста, подождите», выполнения трудоемкой работы в фоновом режиме, а затем закрытия диалогового окна.

P.S. Ваше имя метода немного страшно! :)

1 голос
/ 10 января 2012

Вы должны использовать Обработчик для этого, поэтому, когда все файлы будут удалены, он отправит сообщение обработчику для следующей задачи, которую вы хотите выполнить.

см. Эту ссылку для обработчика ..

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

Надеюсь, вы спрашиваете об этом ....

0 голосов
/ 10 января 2012
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();
}
...