Функция 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
,
которая рекурсивно удаляет файлы и директории