La réponse de Peter Lawrey est excellente car elle est simple et ne dépend pas de quelque chose de spécial, et c'est la façon dont vous devriez procéder. Si vous avez besoin de quelque chose qui supprime également les sous-répertoires et leur contenu, utilisez la récursion :
void purgeDirectory(File dir) {
for (File file: dir.listFiles()) {
if (file.isDirectory())
purgeDirectory(file);
file.delete();
}
}
Pour épargner les sous-répertoires et leur contenu (partie de votre question), modifiez comme suit :
void purgeDirectoryButKeepSubDirectories(File dir) {
for (File file: dir.listFiles()) {
if (!file.isDirectory())
file.delete();
}
}
Ou, puisque vous vouliez une solution en une ligne :
for (File file: dir.listFiles())
if (!file.isDirectory())
file.delete();
L'utilisation d'une bibliothèque externe pour une tâche aussi triviale n'est pas une bonne idée, sauf si vous avez de toute façon besoin de cette bibliothèque pour autre chose, auquel cas il est préférable d'utiliser le code existant. Vous semblez utiliser la bibliothèque Apache de toute façon, alors utilisez sa fonction FileUtils.cleanDirectory()
méthode.
2 votes
C'est parce que .deleteDirectory (même le nom l'indique) est utilisé pour supprimer les répertoires. Il récupère le répertoire dans lequel il se trouve si le fichier n'est pas un répertoire.
0 votes
Essayez de trouver d'autres fonctions dans la classe FileUtils, qui suppriment les fichiers au lieu des répertoires.
1 votes
javacodeexamples.com/java-delete-file-example
1 votes
Pourquoi avez-vous spécifiquement besoin d'un one-liner ? Les performances ne peuvent pas être le critère, parce que n'importe quelle méthode d'une bibliothèque tierce fera cela uniquement de manière récursive. Cela vous donnerait donc les mêmes performances ?
1 votes
Une chose que vous pouvez faire est de supprimer le répertoire puis de le recréer. Nous avons constaté qu'en utilisant
rm -rf directory; mkdir directory
était plus rapide que l'utilisation deFileUtils.cleanDirectory
.