Как в Java перечислить только подкаталоги из каталога?
Я хотел бы использовать функциональность java.io.File, какой метод в Java лучше всего подходит для этого?
Вы можете использовать класс File для вывода списка каталогов.
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));
Обновить
Комментарий автора к этому сообщению требует более быстрого способа, отличного обсуждения здесь: Как БЫСТРО получить список каталогов в Java?
В принципе:
Очень простое решение для Java 8:
Это эквивалентно использованию FileFilter (работает и со старой версией Java):
источник
::
в этом случае?@Mohamed Mansour, вы почти были там ... аргумент "dir" из того, что вы использовали, на самом деле является текущим путем, поэтому он всегда будет возвращать истину. Чтобы увидеть, является ли дочерний каталог подкаталогом или нет, вам нужно протестировать его.
источник
Если вас интересует решение с использованием Java 7 и NIO.2, оно может выглядеть следующим образом:
источник
источник
В 2012 году (дата вопроса) да, не сегодня.
java.nio
Для таких требований следует отдавать предпочтение API.Ужасно с таким количеством ответов, но не так просто, как я бы это использовал
Files.walk().filter().collect()
.В глобальном масштабе возможны два подхода:
1)
Files.walk(Path start, )
не имеетmaxDepth
ограничений, пока2)
Files.walk(Path start, int maxDepth, FileVisitOption... options)
позволяет установить его.Без указания каких-либо ограничений глубины это даст:
И если по устаревшим причинам вам нужно получить список,
File
вы можете просто добавитьmap(Path::toFile)
операцию перед сбором:источник
Files.list(Path)
есть, вероятно, то же самое, что иFiles.walk(Path,1)
.Files.list(Path)
, это справедливая альтернатива, если мы не хотим рекурсивно перебирать папки. Для рекурсивной итерации папокwalk()
подходит лучше.Для тех, кто также интересуется Java 7 и NIO, есть альтернативное решение для ответа @ voo выше . Мы можем использовать вызывающую команду try-with-resources
Files.find()
и лямбда-функцию, которая используется для фильтрации каталогов.Мы даже можем фильтровать каталоги по имени, изменив лямбда-функцию:
или по дате:
источник
Решение, которое сработало для меня, отсутствует в списке ответов. Поэтому я публикую это решение здесь:
Здесь я использовал
org.apache.commons.io.filefilter.FileFilterUtils
Apache commons-io-2.2.jar. Его документация доступна здесь: https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/filefilter/FileFilterUtils.html.источник
Учитывая начальный каталог как
String
String
путь в качестве параметра. В методе:listFiles
методаисточник
Вот решение для моего кода. Я только что немного изменил свой первый ответ . Это отобразит все папки только в желаемом каталоге построчно:
источник
Вы можете использовать API файлов JAVA 7
Если вам нужно конкретное значение, вы можете вызвать карту с нужным значением перед сбором данных.
источник