Чтобы найти каталоги, необходимо отфильтровать список. listFiles() - лучший метод для использования, поскольку он возвращает список объектов File, а не String, это в конечном счете более мощное и позволяет такие вещи, как тестирование, если «файл» - это каталог, который, я считаю, вы пытаетесь сделать.
File home = new File(System.getProperty("user.home"));
for (File file : home.listFiles()) {
if (file.isDirectory()) {
System.out.println(file);
}
}
В качестве альтернативы вы можете использовать FileFilter в listFiles(), это вернет примитивный массив файлов, которые вы можете изменить в список с Arrays.asList
List<File> directories = Arrays.asList(home.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}));
Что касается вопроса из «неправильный» вывод [Ljava.lang.String; @ 1540e19d, это нормально для печати примитивных массивов, в отличие от типов Collection, которые обычно имеют красивую реализацию toString(). Вы можете использовать метод утилиты java.util.Arrays.toString для «красивой печати» каждого элемента.
Если вам требуется рекурсивный список, я бы рассмотрел возможность использования более новой функции java.nio.Files.walk() вместо написания собственного рекурсивного метода.
List<Path> paths = Files.walk(home.toPath()).filter(new Predicate<Path>() {
@Override
public boolean test(Path path) {
return path.toFile().isDirectory();
}
}).collect(Collectors.toList());
Или более лаконично с закрытием Java 8.
List<Path> paths = Files.walk(home.toPath()).filter((path) -> path.toFile().isDirectory()).collect(Collectors.toList());
определить «абсолютно неверно» для нас пожалуйста. –
Хорошо. Это [Ljava.lang.String; @ 1540e19d –
Вы получаете массив String. Перейдите через этот массив или распечатайте его с помощью 'System.out.println (java.util.Arrays.toString (f.list()));' –