Я хочу, чтобы пользователи моего приложения могли удалять папку DCIM (которая находится на SD-карте и содержит подпапки).
Возможно ли это, если да, то как?
android
file-io
directory
delete-directory
начинающий
источник
источник
rm -rf directory
вместоFileUtils.deleteDirectory
. После тестирования мы обнаружили, что это было в несколько раз быстрее. Посмотрите пример реализации здесь: stackoverflow.com/a/58421350/293280Ответы:
Позвольте мне сначала сказать вам, что вы не можете удалить папку DCIM, потому что это системная папка. Если вы удалите его вручную на телефоне, он удалит содержимое этой папки, но не папку DCIM. Вы можете удалить его содержимое, используя метод ниже:
Обновлено согласно комментариям
источник
Вы можете рекурсивно удалять файлы и папки следующим образом:
источник
DCIM\foo\bar\pic.jpg
), и в этом случае код chirag потерпит неудачу.fileOrDirectory.listFiles()
может вернуться,null
если при чтении файлов произошла ошибка ввода-вывода. Об этом ясно говорится в документации: developer.android.com/reference/java/io/File.html#listFiles ()Мы можем использовать аргументы командной строки, чтобы удалить всю папку и ее содержимое.
Пример использования приведенного выше кода:
источник
В Kotlin вы можете использовать
deleteRecursively()
расширение изkotlin.io
пакетаисточник
FilesKt.deleteRecursively(new File("/path/to/dir"));
если вы используете kotlin-stdlibИспользуйте метод ниже, чтобы удалить весь основной каталог, который содержит файлы и его подкаталог. После вызова этого метода еще раз вызовите каталог delete () вашего основного каталога.
источник
Ваш подход подходит для папки, которая содержит только файлы, но если вы ищете сценарий, который также содержит подпапки, тогда необходима рекурсия
Также вы должны зафиксировать возвращаемое значение возврата, чтобы убедиться, что вы можете удалить файл
и включать
в вашем манифесте
источник
Ответов много, но я решил добавить свой, потому что он немного другой. Он основан на ООП;)
Я создал класс DirectoryCleaner , который помогает мне каждый раз, когда мне нужно почистить какой-то каталог.
Это может быть использовано для решения этой проблемы следующим образом:
источник
Если вам не нужно удалять вещи рекурсивно, вы можете попробовать что-то вроде этого:
источник
Вы не можете удалить каталог, если у него есть подкаталоги или файлы в Java. Попробуйте это простое решение из двух строк. Это позволит удалить каталог и конкурсы внутри каталога.
Добавьте эту строку в файл Gradle и синхронизируйте проект
источник
источник
увидеть android.os.FileUtils, это скрыть на API 21
Источник: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#414
источник
Согласно документации :
Так что вы должны проверить, если
listFiles
есть,null
и продолжить, только если это не такисточник
Это то, что я делаю ... (кратко и проверено)
источник
источник
Простой способ удалить все файлы из каталога:
Это общая функция для удаления всех изображений из каталога путем вызова только
deleteAllImageFile (контекст);
источник
Самый безопасный код, который я знаю:
Проверяет, существует ли файл, обрабатывает ли нули, проверяет, был ли каталог фактически удален
источник
Короткая колтинская версия
источник
Вот нерекурсивная реализация, просто для удовольствия:
источник
Это (Пытается удалить все вложенные файлы и подкаталоги, включая предоставленный каталог) :
File
удалитьEmpty Directory
удалитьNot Empty Directory
, вызовите удалить снова с подкаталогом, повторите с 1 по 3пример:
Чтобы получить доступ к каталогу внешнего хранилища, вам необходимы следующие разрешения:
(Используйте
ContextCompat.checkSelfPermission
иActivityCompat.requestPermissions
)Рекурсивный метод:
источник
Я поставил этот, хотя его темпами он удаляет папку с любой структурой каталогов.
Надеюсь это поможет.
источник
Вот ваше решение, оно также обновит галерею.
источник
Еще один (современный) способ ее решения.
На Android начиная с API 26
источник
Я использую эту рекурсивную функцию, чтобы сделать работу:
Функция проверяет, является ли это каталогом или файлом.
Если это каталог, он проверяет, есть ли у него дочерние файлы, если у него есть дочерние файлы, он снова позвонит, передав дочерние файлы и повторив.
Если это файл, то удалите его.
(Не используйте эту функцию для очистки кеша приложения, передавая каталог кеша, потому что он также удалит каталог кеша, так что приложение будет аварийно завершать работу ... Если вы хотите очистить кеш, используйте эту функцию, которая не удалит Дир, вы переходите к нему:
или вы можете проверить, является ли это каталогом кеша, используя:
Пример кода для очистки кэша приложения:
До свидания, хорошего дня и кодирования: D
источник