РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
813 of 1163 menu

Метод walk

Метод walk класса Files рекурсивно обходит все файлы и каталоги, начиная с указанного пути, и возвращает поток Stream с объектами Path. В первом параметре мы передаем начальный путь, во втором - опции обхода (например, FOLLOW_LINKS), а в третьем - максимальную глубину обхода. Параметры опций и глубины являются необязательными. По умолчанию обход идет на неограниченную глубину. Важно закрывать поток после использования, поэтому метод удобно вызывать внутри try-with-resources.

Синтаксис

Files.walk(start, [options], [maxDepth])

Пример

Давайте обойдем каталог и выведем все пути в консоль:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Path.of("."); try (Stream<Path> stream = Files.walk(start)) { stream.forEach(System.out::println); } } }

Результат выполнения кода:

. ./Main.java ./src ./src/Test.java

Пример

Давайте ограничим глубину обхода двумя уровнями:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Path.of("."); try (Stream<Path> stream = Files.walk(start, 2)) { stream.forEach(System.out::println); } } }

Результат выполнения кода:

. ./Main.java ./src ./src/Test.java

Пример

Давайте отфильтруем только обычные файлы с расширением .java:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Path.of("."); try (Stream<Path> stream = Files.walk(start)) { stream .filter(Files::isRegularFile) .filter(p -> p.toString().endsWith(".java")) .forEach(System.out::println); } } }

Результат выполнения кода:

./Main.java ./src/Test.java

Пример

Давайте подсчитаем количество файлов и каталогов в дереве:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Path.of("."); try (Stream<Path> stream = Files.walk(start)) { long res = stream.count(); System.out.println(res); } } }

Результат выполнения кода:

4

Смотрите также

  • класс Files,
    который содержит методы для работы с файлами
  • метод list,
    который возвращает список файлов в каталоге
  • метод find,
    который ищет файлы по заданному условию
  • метод isDirectory,
    который проверяет, является ли путь каталогом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить