web-dev-qa-db-fra.com

Comment supprimer le contenu du 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.

76
lola

Vous devez le faire 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();
}

Alors appelez

deleteFolder(outputFolder);
115
NCode

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

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

Cette fonction supprimera le dossier et tous les fichiers qu'il contient.

Tarte facile :)

93
DHRUV BANSAL

Tous les fichiers doivent être supprimés du répertoire avant sa suppression.

Certaines bibliothèques tierces ont de nombreux utilitaires communs, y compris ceux qui le font pour vous:

10
Bozho

Vous ne pouvez pas supprimer sur un tableau! Cela 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 Java ne peut pas le faire par défaut ...

7
solendil

Voici une solution possible pour résoudre le problème sans bibliothèque:

public static boolean delete(File file) {

    File[] flist = null;

    if(file == null){
        return false;
    }

    if (file.isFile()) {
        return file.delete();
    }

    if (!file.isDirectory()) {
        return false;
    }

    flist = file.listFiles();
    if (flist != null && flist.length > 0) {
        for (File f : flist) {
            if (!delete(f)) {
                return false;
            }
        }
    }

    return file.delete();
}
6
user2546090

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

final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
4
fireshadow52

Utilisez FileUtils avec FileUtils.deleteDirectory ();

3
Dellanio
for(File f : files) {
    f.delete();
}    
files.delete(); // will work
1
Vaandu