En Java, comment lister uniquement les sous-répertoires d'un répertoire ?
J'aimerais utiliser la fonctionnalité java.io.File. Quelle est la meilleure méthode en Java pour le faire ?
En Java, comment lister uniquement les sous-répertoires d'un répertoire ?
J'aimerais utiliser la fonctionnalité java.io.File. Quelle est la meilleure méthode en Java pour le faire ?
Vous pouvez utiliser le Fichier pour lister les répertoires.
File file = new File("/path/to/directory");
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
System.out.println(Arrays.toString(directories));
Mise à jour
Commentaire de l'auteur sur ce post voulait un moyen plus rapide, grande discussion ici : Comment récupérer une liste de répertoires RAPIDEMENT en Java ?
En gros :
Une solution Java 8 très simple :
File[] directories = new File("/your/path/").listFiles(File::isDirectory);
C'est l'équivalent de l'utilisation d'un FileFilter (fonctionne également avec les anciens Java) :
File[] directories = new File("/your/path/").listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory();
}
});
Est-ce que cela récupère les sous-répertoires ou seulement les répertoires directement sous /votre/chemin/ ?
@Mohamed Mansour vous y étiez presque... l'argument "dir" que vous utilisiez est en fait le chemin actuel, donc il retournera toujours vrai. Afin de voir si l'enfant est un sous-répertoire ou non, vous devez tester cet enfant.
File file = new File("/path/to/directory");
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
System.out.println(Arrays.toString(directories));
Si vous êtes intéressé par une solution utilisant Java 7 et NIO.2, voici comment cela pourrait se passer :
private static class DirectoriesFilter implements Filter<Path> {
@Override
public boolean accept(Path entry) throws IOException {
return Files.isDirectory(entry);
}
}
try (DirectoryStream<Path> ds = Files.newDirectoryStream(FileSystems.getDefault().getPath(root), new DirectoriesFilter())) {
for (Path p : ds) {
System.out.println(p.getFileName());
}
} catch (IOException e) {
e.printStackTrace();
}
Bonjour et bienvenue sur StackOverflow ! Pouvez-vous élaborer un peu plus votre réponse ? Par exemple, expliquer les parties intéressantes de vos extraits de code ou faire un lien vers la documentation pour une lecture plus approfondie ?
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.