Только начал изучать Java и дойдя о раздела Path и Files столкнулся со следующей проблемой.
Задача: Вывести в консоль все папки и подпапки каталога.
Решил не делать это через рекурсию, а освоить метод Files.walkFileTree. Казалось бы, все просто. Задать проверку isDirectory для attrs в FileVisitResult во время провода директории и дело с концом. Однако, по какой то причине, эта проверка не действует и в список ничего не добавляется. Метод просто "бурится" до конца директории, игнорируя подпапки, как таковые. Что то близко похожее к желаемому результату было получено при помощи метода postVisitDirectory, но там в список, помимо подкатологов, подавлялась папка самой директории, где происходит поиск, что не совсем корректно. Что я делаю не так?
public class Prime {
public static void main(String[] args) throws IOException {
for (String H : getFileTree("C:\\Users\\IdeaProjects\\untitled1\\JR")) {
System.out.println(H);
}}
public static List<String> getFileTree(String root) throws IOException {
List<String> a = new ArrayList<>();
Files.walkFileTree(Paths.get(root), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if(attrs.isDirectory())
a.add(attrs.toString());
return FileVisitResult.CONTINUE;
}
});
return a;
}
}
Для поиска директорий нужно переопределить соседний метод preVisitDirectory
public static List<String> getFileTree(String root) throws IOException {
List<String> a = new ArrayList<>();
Files.walkFileTree(Paths.get(root), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
a.add(dir.toString());
return super.preVisitDirectory(dir, attrs);
}
});
return a;
}
Сделайте так:
List<Path> list = null;
try {
Path path = Path.of(root);
list = Files.walk(path).filter(p -> p != path && p.toFile().isDirectory()).collect(Collectors.toList());
} catch (IOException e) {
// TODO implement better exception handling
e.printStackTrace();
}
System.out.println(list);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, можно ли имея только сервисный ключ получить видео из общедоступных записей на стене группы? делаю к примеру запрос https://vkcom/dev/wall
Как поменять элементы массива местами и вывести их в столбик? Пользователь сам вводит числа в массив, неопределенное количество Допустим...
Можно ли задавать методам интерфейса модификатор private или protected? Если да то зачем?
Здравствуй сообщество, вопрос прост почему данная функция отрабатывает не так как нужноВроде бы должно всё игнорировать так как я добавил...