Je souhaite que les utilisateurs de mon application puissent supprimer le dossier DCIM (qui se trouve sur la carte SD et contient des sous-dossiers).
Est-ce possible, si oui, comment?
android
file-io
directory
delete-directory
Débutant
la source
la source
rm -rf directory
place deFileUtils.deleteDirectory
. Après l'analyse comparative, nous avons constaté que c'était plusieurs fois plus rapide. Découvrez un exemple d'implémentation ici: stackoverflow.com/a/58421350/293280Réponses:
Laissez-moi vous dire tout d'abord que vous ne pouvez pas supprimer le dossier DCIM car il s'agit d'un dossier système. Lorsque vous le supprimez manuellement sur le téléphone, il supprimera le contenu de ce dossier, mais pas le dossier DCIM. Vous pouvez supprimer son contenu en utilisant la méthode ci-dessous:
Mis à jour selon les commentaires
la source
Vous pouvez supprimer des fichiers et des dossiers de manière récursive comme ceci:
la source
DCIM\foo\bar\pic.jpg
), auquel cas le code de chirag échouera.fileOrDirectory.listFiles()
peut retournernull
s'il y a une erreur d'E / S lors de la lecture des fichiers. Ceci est clairement indiqué dans la documentation: developer.android.com/reference/java/io/File.html#listFiles ()Nous pouvons utiliser les arguments de la ligne de commande pour supprimer un dossier entier et son contenu.
Exemple d'utilisation du code ci-dessus:
la source
Dans Kotlin, vous pouvez utiliser l'
deleteRecursively()
extension dukotlin.io
packagela source
FilesKt.deleteRecursively(new File("/path/to/dir"));
si vous utilisez kotlin-stdlibutilisez la méthode ci-dessous pour supprimer tout le répertoire principal qui contient des fichiers et son sous-répertoire. Après avoir appelé à nouveau cette méthode, appelez à nouveau le répertoire delete () de votre répertoire principal.
la source
Votre approche est décente pour un dossier qui ne contient que des fichiers, mais si vous recherchez un scénario contenant également des sous-dossiers, la récursivité est nécessaire
Vous devez également capturer la valeur de retour du retour pour vous assurer que vous êtes autorisé à supprimer le fichier
et inclure
dans ton manifeste
la source
Il y a beaucoup de réponses, mais j'ai décidé d'ajouter la mienne, car c'est un peu différent. Il est basé sur la POO;)
J'ai créé la classe DirectoryCleaner , qui m'aide à chaque fois que j'ai besoin de nettoyer un répertoire.
Il peut être utilisé pour résoudre ce problème de la manière suivante:
la source
Si vous n'avez pas besoin de supprimer des éléments de manière récursive, vous pouvez essayer quelque chose comme ceci:
la source
Vous ne pouvez pas supprimer le répertoire s'il contient des sous-répertoires ou des fichiers en Java. Essayez cette solution simple en deux lignes. Cela supprimera le répertoire et les concours à l'intérieur du répertoire.
Ajoutez cette ligne dans le fichier gradle et synchronisez le projet
la source
la source
voir android.os.FileUtils, il se cache sur l'API 21
Source: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#414
la source
Selon la documentation :
Vous devriez donc vérifier si
listFiles
c'estnull
et ne continuer que si ce n'est pas le casla source
C'est ce que je fais ... (laconique et testé)
la source
la source
Un moyen simple de supprimer tous les fichiers du répertoire:
C'est une fonction générique pour supprimer toutes les images du répertoire en appelant uniquement
deleteAllImageFile (contexte);
la source
Code le plus sûr que je connaisse:
Vérifie que le fichier existe, gère les valeurs nulles, vérifie que le répertoire a bien été supprimé
la source
Version courte koltin
la source
Voici une implémentation non récursive, juste pour le plaisir:
la source
Ceci (tente de supprimer tous les sous-fichiers et sous-répertoires, y compris le répertoire fourni) :
File
, supprimerEmpty Directory
, supprimerNot Empty Directory
, appelez à nouveau delete avec le sous-répertoire, répétez 1 à 3exemple:
Pour accéder au répertoire de stockage externe, vous avez besoin des autorisations suivantes:
(Utiliser
ContextCompat.checkSelfPermission
etActivityCompat.requestPermissions
)Méthode récursive:
la source
J'ai mis celui-ci bien qu'il supprime un dossier avec n'importe quelle structure de répertoire.
J'espère que cela t'aides.
la source
voici votre solution, elle rafraîchira également la galerie.
la source
Encore une autre façon (moderne) de le résoudre.
Sur Android depuis l'API 26
la source
J'utilise cette fonction récursive pour faire le travail:
La fonction vérifie s'il s'agit d'un répertoire ou d'un fichier.
Si c'est un répertoire vérifie s'il a des fichiers enfants, s'il a des fichiers enfants, il s'appellera à nouveau en passant les enfants et en se répétant.
S'il s'agit d'un fichier, supprimez-le.
(N'utilisez pas cette fonction pour vider le cache de l'application en passant le répertoire du cache car cela supprimera également le répertoire du cache et l'application plantera ... Si vous souhaitez effacer le cache, vous utilisez cette fonction qui ne supprimera pas le dir vous lui passez:
ou vous pouvez vérifier s'il s'agit du répertoire de cache en utilisant:
Exemple de code pour vider le cache de l'application:
Au revoir, bonne journée et codage: D
la source