En Java, comment répertorier uniquement les sous-répertoires d'un répertoire?
Je voudrais utiliser la fonctionnalité java.io.File, quelle est la meilleure méthode en Java pour cela?
Vous pouvez utiliser la classe File pour répertorier 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));
Mettre à jour
Le commentaire de l'auteur sur ce post voulait un moyen plus rapide, bonne discussion ici: Comment récupérer une liste de répertoires RAPIDEMENT en Java?
Fondamentalement:
Une solution Java 8 très simple:
Cela équivaut à utiliser un FileFilter (fonctionne également avec l'ancien Java):
la source
::
dans ce cas?@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.
la source
Si vous êtes intéressé par une solution utilisant Java 7 et NIO.2, cela pourrait ressembler à ceci:
la source
la source
Pour ceux qui s'intéressent également à Java 7 et NIO, il existe une solution alternative à la réponse de @ voo ci-dessus . Nous pouvons utiliser un try-with-resources qui appelle
Files.find()
et une fonction lambda qui est utilisée pour filtrer les répertoires.Nous pouvons même filtrer les répertoires par nom en modifiant la fonction lambda:
ou par date:
la source
En 2012 (date de la question) oui, pas aujourd'hui.
java.nio
L'API doit être privilégiée pour de telles exigences.Terrible avec tant de réponses, mais pas la manière simple que j'utiliserais
Files.walk().filter().collect()
.Globalement, deux approches sont possibles:
1)
Files.walk(Path start, )
n'a pas demaxDepth
limites alors que2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
permet de le paramétrer.Sans spécifier de limitation de profondeur, cela donnerait:
Et si pour des raisons d'héritage, vous devez obtenir une liste,
File
vous pouvez simplement ajouter unemap(Path::toFile)
opération avant la collecte:la source
Files.list(Path)
ce qui est probablement le même queFiles.walk(Path,1)
.Files.list(Path)
est une alternative juste si nous ne voulons pas itérer récursivement les dossiers. Pour itérer les dossiers de manière récursive,walk()
convient mieux.La solution qui a fonctionné pour moi est absente de la liste des réponses. Par conséquent, je poste cette solution ici:
Ici, j'ai utilisé
org.apache.commons.io.filefilter.FileFilterUtils
Apache commons-io-2.2.jar. Sa documentation est disponible ici: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.htmlla source
Étant donné un répertoire de départ comme un
String
String
chemin comme paramètre. Dans la méthode:listFiles
méthodela source
Voici la solution pour mon code. Je viens de faire un petit changement par rapport à la première réponse . Cela listera tous les dossiers uniquement dans le répertoire souhaité ligne par ligne:
la source