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

Метод find

Метод find класса Files выполняет обход дерева файловой системы, начиная с заданного начального пути, и возвращает поток Stream<Path>, содержащий все файлы и директории, которые удовлетворяют заданным условиям. В первый параметр мы передаем начальный путь (объект Path), с которого начинается поиск. Во второй параметр мы передаем максимальную глубину обхода (целое число). В третий параметр мы передаем один или несколько объектов BiPredicate<Path, BasicFileAttributes> - условия, которым должны соответствовать найденные элементы. Также можно указать опции обхода через FileVisitOption. Метод возвращает ленивый поток, поэтому обход файловой системы выполняется по мере обработки потока.

Синтаксис

Files.find(start, maxDepth, matcher, options)

Пример

Давайте найдем все обычные файлы в текущей директории с глубиной обхода 1 и выведем их на экран:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Paths.get("."); try (Stream<Path> stream = Files.find( start, 1, (path, attrs) -> attrs.isRegularFile() )) { stream.forEach(System.out::println); } } }

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

./Main.java ./README.md

Пример

Давайте найдем все файлы с расширением .txt на глубине до 2 уровней и выведем их количество:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Paths.get("."); try (Stream<Path> stream = Files.find( start, 2, (path, attrs) -> path.toString().endsWith(".txt") )) { List<Path> res = stream.collect(Collectors.toList()); System.out.println(res); } } }

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

[./docs/notes.txt, ./logs/error.txt]

Пример

Давайте найдем все директории на глубине до 1 уровня, начиная с текущего каталога:

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { Path start = Paths.get("."); try (Stream<Path> stream = Files.find( start, 1, (path, attrs) -> attrs.isDirectory() )) { List<Path> res = stream.collect(Collectors.toList()); System.out.println(res); } } }

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

[./src, ./docs, ./logs]

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

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