Em Java, como listo apenas os subdiretórios de um diretório?
Eu gostaria de usar a funcionalidade java.io.File, qual é o melhor método em Java para fazer isso?
Você pode usar a classe File para listar os diretórios.
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));
Atualizar
O comentário do autor neste post queria uma maneira mais rápida, ótima discussão aqui: Como recuperar uma lista de diretórios RAPIDAMENTE em Java?
Basicamente:
Uma solução Java 8 muito simples:
É equivalente a usar um FileFilter (funciona com Java mais antigo também):
fonte
::
funcionam neste caso?@Mohamed Mansour você estava quase lá ... o argumento "dir" que você estava usando é na verdade o caminho atual, então ele sempre retornará verdadeiro. Para ver se a criança é um subdiretório ou não, você precisa testar essa criança.
fonte
Caso você esteja interessado em uma solução usando Java 7 e NIO.2, poderia ser assim:
fonte
fonte
Para os interessados também em Java 7 e NIO, existe uma solução alternativa para a resposta de @voo acima . Podemos usar um try-with-resources que chama
Files.find()
e uma função lambda que é usada para filtrar os diretórios.Podemos até filtrar diretórios por nome, alterando a função lambda:
ou por data:
fonte
Em 2012 (data da pergunta) sim, hoje não.
java.nio
A API deve ser favorecida para tais requisitos.Terrível com tantas respostas, mas não da maneira simples que eu usaria
Files.walk().filter().collect()
.Globalmente, duas abordagens são possíveis:
1)
Files.walk(Path start, )
não temmaxDepth
limitações enquanto2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
permite configurá-lo.Sem especificar qualquer limitação de profundidade, daria:
E se por razões de legado, você precisa obter uma lista,
File
você pode simplesmente adicionar umamap(Path::toFile)
operação antes da coleta:fonte
Files.list(Path)
que é provavelmente o mesmo queFiles.walk(Path,1)
.Files.list(Path)
é uma alternativa justa se não quisermos iterar pastas recursivamente. Para iterar pastas recursivamente,walk()
ajusta-se melhor.A solução que funcionou para mim está faltando na lista de respostas. Portanto, estou postando esta solução aqui:
Aqui, usei
org.apache.commons.io.filefilter.FileFilterUtils
do Apache commons-io-2.2.jar. Sua documentação está disponível aqui: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.htmlfonte
Dado um diretório inicial como um
String
String
caminho como parâmetro. No método:listFiles
métodofonte
Aqui está a solução para o meu código. Acabei de fazer uma pequena mudança desde a primeira resposta . Isso listará todas as pastas apenas no diretório desejado, linha por linha:
fonte