69 votes

Comment vérifier si un répertoire est vide en Java

Je voudrais vérifier si le répertoire est vide en Java. Mais il est possible qu'il y ait beaucoup de fichiers dans ce répertoire, j'aimerais donc le faire sans interroger sa liste de fichiers, si possible.

98voto

Alan Points 1112

Avec JDK7, vous pouvez utiliser Files.newDirectoryStream pour ouvrir le répertoire, puis utiliser la méthode hasNext() de l'itérateur pour tester s'il y a des fichiers sur lesquels itérer (n'oubliez pas de fermer le flux). Cela devrait mieux fonctionner pour les répertoires volumineux ou lorsque le répertoire se trouve sur un système de fichiers distant par rapport aux méthodes de liste java.io.File.

Exemple:

 private static boolean isDirEmpty(final Path directory) throws IOException {
    try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
        return !dirStream.iterator().hasNext();
    }
}

26voto

Debu Points 113
File parentDir =  file.getParentFile();
if(parentDir.isDirectory() && parentDir.list().length == 0) {
    LOGGER.info("Directory is empty");
} else {
    LOGGER.info("Directory is not empty");
}

18voto

Minnow Points 81
if(!Files.list(Paths.get(directory)).findAny().isPresent()){
    Files.delete(Paths.get(directory));
 }

Comme Files.list renvoie un flux peuplé paresseusement, cela résoudra votre problème lié au temps d'exécution.

4voto

Peng Points 129
boolean isEmptyDirectory(Path dir) throws IOException {
    try (var entries = Files.list(dir)) {
        return entries.count() == 0;
    }
}

Semblable à la solution de @Minnow (mais avec moins d'appels de méthode), cette solution présente l'avantage "Comme Files.list renvoie un flux peuplé paresseusement, cela résoudra votre problème lié au temps d'exécution".

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