91 votes

Comment supprimer le contenu d'un répertoire en Java ?

Après avoir énuméré un répertoire, je dois maintenant supprimer tous les fichiers.

J'ai utilisé :

final File[] files = outputFolder.listFiles();
files.delete();

Mais cela n'a pas supprimé le répertoire.

34 votes

Est-ce que ça compile ? Vous appelez delete sur un tableau.

130voto

NCode Points 1356

Vous devez faire cela pour chaque fichier :

public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
    if(files!=null) { //some JVMs return null for empty dirs
        for(File f: files) {
            if(f.isDirectory()) {
                deleteFolder(f);
            } else {
                f.delete();
            }
        }
    }
    folder.delete();
}

Ensuite, appelez

deleteFolder(outputFolder);

0 votes

+1. Cependant, la dernière ligne devrait être outputFolder.delete() au lieu de output.delete() .

0 votes

Je l'ai essayé mais quand j'ouvre le navigateur, le dossier est toujours là et contient tous les fichiers...

3 votes

Cela ne fonctionne pas si l'un des fichiers est un répertoire non vide. Vous devez supprimer le contenu du répertoire récursivement. if(f.isDirectory())myDelete(f)

105voto

dhroove Points 2072

Pour supprimer un dossier contenant des fichiers, pas besoin de boucles ou de recherche récursive. Vous pouvez utiliser directement :

FileUtils.deleteDirectory(<File object of directory>);

Cette fonction supprime le répertoire et tous les fichiers qu'il contient.

16 votes

Je suppose que vous voulez parler de la méthode commons-io : org.apache.commons.io.FileUtils.deleteDirectory(File)

68 votes

On y est presque ! La question était de savoir comment supprimer le contenu du dossier (et non le filtre lui-même). Commons-io a également une méthode pour cela : FileUtils.cleanDirectory(File) ;

0 votes

Existe-t-il un moyen similaire pour supprimer uniquement les fichiers contenus dans le dossier et non le dossier lui-même ?

11voto

Bozho Points 273663

Tous les fichiers doivent être supprimés du répertoire avant qu'il ne soit supprimé.

Il existe des bibliothèques tierces qui proposent de nombreux utilitaires courants, y compris ceux qui font cela pour vous :

10 votes

Malheureusement, Files.deleteRecursively() a été retiré de la goyave dans la version 11.0.

1 votes

FileUtils.forceDelete() appartient à commons-io.

8voto

solendil Points 5098

On ne peut pas supprimer sur un tableau ! Ceci devrait mieux fonctionner :

for (File f : files) f.delete();

Mais cela ne fonctionnera pas si les dossiers ne sont pas vides. Dans ce cas, vous devrez descendre récursivement dans la hiérarchie des dossiers et tout supprimer. Oui, c'est dommage que Java ne puisse pas le faire par défaut...

4voto

fireshadow52 Points 3796

Vous ne pouvez pas supprimer un File réseau. Comme toutes les autres réponses le suggèrent, vous devez supprimer chaque fichier individuel avant de supprimer le dossier...

final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.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