АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP, Python или фреймворки. Сегодня последний день для записи! Жми!
615 of 1310 menu
Новый формат обучения! Репетиторство по программированию. Есть еще 3 свободных места! Жми для подробностей.

Функция walk

Функция walk выполняет рекурсивный обход файлового дерева, начиная с указанной директории. Возвращает последовательность File объектов, представляющих файлы и директории в порядке обхода в глубину. Функция позволяет указать направление обхода: сверху вниз или снизу вверх.

Импорт

import java.io.File

Синтаксис

fun File.walk(direction: FileWalkDirection = FileWalkDirection.TOP_DOWN): FileTreeWalk
fun File.walkBottomUp(): FileTreeWalk
fun File.walkTopDown(): FileTreeWalk

Пример

Обойдем все файлы и директории в "/home/user/docs" с направлением обхода сверху вниз:

val directory = File("/home/user/docs") val files: Sequence<File> = directory.walk() files.forEach { file -> println(file.absolutePath) }

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

"/home/user/docs" "/home/user/docs/file1.txt" "/home/user/docs/subdir" "/home/user/docs/subdir/file2.txt"

Пример

Обойдем все файлы и директории в "/home/user/docs" с направлением обхода снизу вверх:

val directory = File("/home/user/docs") val files: Sequence<File> = directory.walkBottomUp() files.forEach { file -> println(file.absolutePath) }

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

"/home/user/docs/file1.txt" "/home/user/docs/subdir/file2.txt" "/home/user/docs/subdir" "/home/user/docs"

Пример

Отфильтруем только файлы с расширением ".txt" в директории "/home/user/docs":

val directory = File("/home/user/docs") val txtFiles = directory.walk() .filter { it.isFile && it.extension == "txt" } txtFiles.forEach { file -> println(file.absolutePath) }

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

"/home/user/docs/file1.txt" "/home/user/docs/subdir/file2.txt"

Пример

Подсчитаем общий размер всех файлов в директории "/home/user/docs":

val directory = File("/home/user/docs") val totalSize = directory.walk() .filter { it.isFile } .sumOf { it.length() } println("Total size: $totalSize bytes")

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

Total size: 2048 bytes

Пример

Найдем все пустые директории в "/home/user/docs":

val directory = File("/home/user/docs") val emptyDirs = directory.walk() .filter { it.isDirectory && it.list()?.isEmpty() ?: false } emptyDirs.forEach { dir -> println("Empty directory: ${dir.absolutePath}") }

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

Empty directory: "/home/user/docs/empty_dir"

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

  • класс File,
    который представляет файл или директорию
  • функцию listFiles,
    которая возвращает содержимое директории без рекурсивного обхода
  • функцию copyRecursively,
    которая рекурсивно копирует файлы и директории
  • функцию deleteRecursively,
    которая рекурсивно удаляет файлы и директории