Quiero que los usuarios de mi aplicación puedan eliminar la carpeta DCIM (que se encuentra en la tarjeta SD y contiene subcarpetas).
¿Es esto posible? De ser así, ¿cómo?
android
file-io
directory
delete-directory
Principiante
fuente
fuente
rm -rf directory
lugar deFileUtils.deleteDirectory
. Después de la evaluación comparativa, descubrimos que era varias veces más rápido. Echa un vistazo a una implementación de muestra aquí: stackoverflow.com/a/58421350/293280Respuestas:
Permítame decirle lo primero que no puede eliminar la carpeta DCIM porque es una carpeta del sistema. A medida que lo elimine manualmente en el teléfono, eliminará el contenido de esa carpeta, pero no la carpeta DCIM. Puede eliminar su contenido utilizando el siguiente método:
Actualizado según los comentarios
fuente
Puede eliminar archivos y carpetas de forma recursiva de esta manera:
fuente
DCIM\foo\bar\pic.jpg
), en cuyo caso el código de chirag fallará.fileOrDirectory.listFiles()
puede regresarnull
si hay un error de E / S al leer los archivos. Esto se indica claramente en la documentación: developer.android.com/reference/java/io/File.html#listFiles ()Podemos usar los argumentos de la línea de comandos para eliminar una carpeta completa y su contenido.
Ejemplo de uso del código anterior:
fuente
En Kotlin puedes usar la
deleteRecursively()
extensión delkotlin.io
paquetefuente
FilesKt.deleteRecursively(new File("/path/to/dir"));
si está usando kotlin-stdlibutilice el siguiente método para eliminar todo el directorio principal que contiene archivos y su subdirectorio. Después de llamar a este método una vez más, llame al directorio delete () de su directorio principal.
fuente
Su enfoque es decente para una carpeta que solo contiene archivos, pero si está buscando un escenario que también contenga subcarpetas, entonces se necesita recurrencia
También debe capturar el valor de retorno de la devolución para asegurarse de que tiene permiso para eliminar el archivo
e incluir
en tu manifiesto
fuente
Hay muchas respuestas, pero decidí agregar las mías, porque es un poco diferente. Se basa en OOP;)
Creé la clase DirectoryCleaner , que me ayuda cada vez que necesito limpiar algún directorio.
Se puede utilizar para resolver este problema de la siguiente manera:
fuente
Si no necesita eliminar cosas de forma recursiva, puede intentar algo como esto:
fuente
No puede eliminar el directorio si tiene subdirectorios o archivos en Java. Pruebe esta solución simple de dos líneas. Esto eliminará el directorio y los concursos dentro del directorio.
Agregue esta línea en el archivo gradle y sincronice el proyecto
fuente
fuente
ver android.os.FileUtils, se esconde en API 21
Fuente: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#414
fuente
De acuerdo con la documentación :
Por lo tanto, debe verificar si
listFiles
esnull
y solo continuar si no esfuente
Esto es lo que hago ... (breve y probado)
fuente
fuente
Manera simple de eliminar todos los archivos del directorio:
Es una función genérica para eliminar todas las imágenes del directorio llamando solo
deleteAllImageFile (contexto);
fuente
El código más seguro que conozco:
Comprueba que el archivo existe, maneja nulos, comprueba que el directorio se haya eliminado realmente
fuente
Versión corta de koltin
fuente
Aquí hay una implementación no recursiva, solo por diversión:
fuente
Esto (intenta eliminar todos los subarchivos y subdirectorios, incluido el directorio suministrado) :
File
, eliminarEmpty Directory
, eliminarNot Empty Directory
, llame a eliminar nuevamente con el subdirectorio, repita 1 a 3ejemplo:
Para obtener acceso al Directorio de almacenamiento externo, necesita los siguientes permisos:
(Usar
ContextCompat.checkSelfPermission
yActivityCompat.requestPermissions
)Método recursivo:
fuente
He puesto este, aunque sus pasos eliminan una carpeta con cualquier estructura de directorio.
Espero que esto ayude.
fuente
Aquí está su solución, también actualizará la galería.
fuente
Otra forma (moderna) de resolverlo.
En Android desde API 26
fuente
Estoy usando esta función recursiva para hacer el trabajo:
La función comprueba si es un directorio o un archivo.
Si es un directorio, verifica si tiene archivos secundarios, si tiene archivos secundarios se llamará a sí misma nuevamente pasando a los hijos y repitiendo.
Si es un archivo, elimínelo.
(No use esta función para borrar el caché de la aplicación pasando el directorio de caché porque también eliminará el directorio de caché, por lo que la aplicación se bloqueará ... Si desea borrar el caché, use esta función que no borrará el dir pasas a ella:
o puede verificar si es el directorio de caché usando:
Código de ejemplo para borrar el caché de la aplicación:
Adiós, que tengas un buen día y codificación: D
fuente