423 votes

Supprimer les fichiers récursivement en Java

Y a-t-il un moyen de supprimer toute dossiers récursivement en Java ? Dans le cas normal, il est possible de supprimer un répertoire vide. Cependant quand il s’agit de la suppression des dossiers complets avec du contenu, il n’est pas aussi simple que cela plus. Comment supprimer des dossiers complets avec du contenu en Java ?

490voto

Steve K Points 10475

Vous devriez vérifier commons-io d’Apache. Il a une classe de FileUtils qui va faire ce que vous voulez.

195voto

erickson Points 127945

Avec Java 7, nous pouvons enfin faire avec détection fiable symlink. (Je ne considère pas commons-io d’Apache d’avoir la détection fiable de lien symbolique pour l’instant, car il ne gère pas les liens sur les fenêtres créées avec `` .)

Dans un souci de l’histoire, voici un pré Java 7 répondre, dont suit les liens symboliques.

67voto

Trevor Robinson Points 3657

Support de Java 7 ajouté pour la marche des répertoires avec manipulation de lien symbolique :

J’utilise cela comme un secours de méthodes spécifiques à la plateforme (dans le présent code non testé ) :

(SystemUtils provient d’Apache Commons Lang. Processus est privé, mais son comportement devrait être évident.)

35voto

Paulitex Points 183

Viens de voir que ma solution est plus ou moins la même chose que d’erickson, juste emballé comme une méthode statique. Chute de cela quelque part, c’est bien un poids plus léger que l’installation de Apache Commons pour quelque chose qui (comme vous pouvez le voir) est assez simple.

20voto

trianam Points 91

Une solution avec une pile et sans méthodes récursives:

 File dir = new File("/path/to/dir");
File[] currList;
Stack<File> stack = new Stack<File>();
stack.push(dir);
while (! stack.isEmpty()) {
    if (stack.lastElement().isDirectory()) {
        currList = stack.lastElement().listFiles();
        if (currList.length > 0) {
            for (File curr: currList) {
                stack.push(curr);
            }
        } else {
            stack.pop().delete();
        }
    } else {
        stack.pop().delete();
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X