Je veux supprimer tous les fichiers du répertoire ABC.
Lorsque j'ai essayé, FileUtils.deleteDirectory(new File("C:/test/ABC/"));
il supprime également le dossier ABC.
Existe-t-il une solution à une ligne où je peux supprimer des fichiers dans le répertoire mais pas dans le répertoire?
java
file-io
apache-commons-io
Fahim Parkar
la source
la source
rm -rf directory; mkdir directory
était plus rapide que l'utilisationFileUtils.cleanDirectory
.Réponses:
Cette méthode est disponible dans le même fichier. Cela supprimera également de manière récursive tous les sous-dossiers et fichiers qui s'y trouvent.
Documents:
org.apache.commons.io.FileUtils.cleanDirectory
la source
rm -rf directory
était beaucoup plus efficace que l'utilisationFileUtils.cleanDirectory
.Voulez-vous dire comme?
Cela supprimera uniquement les fichiers, pas les répertoires.
la source
for(File file: dir.listFiles())
est probablement censé être ....for (File file : new java.io.File("C:\\DeleteMeFolder").listFiles())
...La réponse de Peter Lawrey est excellente car elle est simple et ne dépend de rien de spécial, et c'est la façon dont vous devez le faire. Si vous avez besoin de quelque chose qui supprime également les sous-répertoires et leur contenu, utilisez la récursivité:
Pour épargner des sous-répertoires et leur contenu (partie de votre question), modifiez comme suit:
Ou, puisque vous vouliez une solution à une ligne:
L'utilisation d'une bibliothèque externe pour une tâche aussi banale n'est pas une bonne idée à moins que vous n'ayez besoin de cette bibliothèque pour autre chose de toute façon, auquel cas il est préférable d'utiliser du code existant. Vous semblez utiliser la bibliothèque Apache de toute façon, utilisez donc sa
FileUtils.cleanDirectory()
méthode.la source
Flux Java 8
Cela supprime uniquement les fichiers de ABC (les sous-répertoires ne sont pas modifiés):
Cela supprime uniquement les fichiers de l' ABC (et des sous-répertoires):
^ Cette version nécessite de gérer l'IOException
la source
Ou pour l'utiliser en Java 8:
Dommage que la gestion des exceptions soit si encombrante, sinon ce serait un monoplace ...
la source
la source
Une autre solution Java 8 Stream pour supprimer tout le contenu d'un dossier, sous-répertoires inclus, mais pas le dossier lui-même.
Usage:
et le code:
Le problème avec chaque solution de flux impliquant Files.walk ou Files.delete est que ces méthodes génèrent des IOException qui sont difficiles à gérer dans les flux.
J'ai essayé de créer une solution la plus concise possible.
la source
Pour supprimer tous les fichiers du répertoire, dites "C: \ Exemple"
la source
rm -rf
était beaucoup plus performant queFileUtils.cleanDirectory
.Il ne s'agit pas d'une solution monoligne, mais après une analyse comparative approfondie, nous avons constaté que l'utilisation
rm -rf
était plusieurs fois plus rapide que l'utilisationFileUtils.cleanDirectory
.Bien sûr, si vous avez un répertoire petit ou simple, cela n'aura pas d'importance, mais dans notre cas, nous avions plusieurs gigaoctets et des sous-répertoires profondément imbriqués où cela prendrait plus de 10 minutes avec
FileUtils.cleanDirectory
et seulement 1 minute avecrm -rf
.Voici notre implémentation Java approximative pour ce faire:
Il vaut la peine d'essayer si vous avez affaire à des répertoires volumineux ou complexes.
la source
Si vous souhaitez supprimer tous les fichiers, supprimez
déclaration, cela fonctionnera.
la source
Je pense que cela fonctionnera (basé sur la réponse précédente de NonlinearFruit):
À votre santé!
la source