Не удается удалить файлы из папки внутреннего хранилища - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу удалить все файлы из папки загрузки

enter image description here

Я пробую этот подход -

File mydir = new File(String.valueOf(Environment.getExternalStoragePublicDirectory("Download")));
File lister = mydir.getAbsoluteFile();

System.out.println("Total files: " + lister.list().length);

for (String list : lister.list()) {
    File f = new File(lister, list);
    if (f.delete())
        System.out.println(list + " is Deleted!");
    else
        System.out.println(list + " not deleted!");
}

Это не не работает, f.delete возвращает false.

Я уже рассмотрел много таких вопросов о SO, большинство из них предлагают использовать delete () или getCanonicalFile (). delete (). Это просто не работает.

manifest-

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

попробуйте это, это удалит все файлы в каталоге filePath

File file = new File(filePath);

if (file.isDirectory()) {
    String[] children = file.list();
    if (children != null) {
        for (String aChildren : children) {
            boolean isDelete = new File(file, aChildren).delete();
            if (isDelete)
                  System.out.println(aChildren + " is Deleted!");
            else
                  System.out.println(aChildren + " not deleted!");
        }
    }
}
0 голосов
/ 06 марта 2020

Исправлено.

Мое приложение запрашивало у пользователя только разрешение на ЧТЕНИЕ, но не ЗАПИСИ.

Для удаления любого файла требуется разрешение НАПИСАТЬ. Поэтому я изменил READ на WRITE, это сработало!

 if (ContextCompat.checkSelfPermission(MainActivity.this
            , Manifest.permission.**WRITE**_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
     {   
       // ...
     }
0 голосов
/ 28 февраля 2020

Не ответ, а более надежный код:

                            File dir = Environment.getExternalStoragePublicDirectory("Download");

                            if ( !dir.canWrite() )
                            {
                                Toast.makeText(context, "Can not write in directory\n\n"  + dir.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                return;
                            }

                            File files [] = dir.listFiles();

                            if ( files==null )
                            {
                                Toast.makeText(context, "Could not listFiles() for\n\n"  + dir.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                return;
                            }

                            for ( File file : files)
                            {
                                if ( file.isDirectory())
                                    continue;

                                if ( ! file.delete())
                                {
                                Toast.makeText(context, "Could not delete\n\n" + file.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                break;
                                }

                            }

Пожалуйста, попробуйте.

...