copy To Recursively
Начиная с Kotlin: 1.8
fun Path.copyToRecursively(target: Path, onError: (source: Path, target: Path, Exception) -> OnErrorResult = { _, _, exception -> throw exception }, followLinks: Boolean, overwrite: Boolean): Path
Рекурсивно копирует этот каталог и его содержимое по указанному пути назначения target. Обратите внимание: если эта функция выбрасывает исключение, часть содержимого уже могла быть скопирована.
В отличие от File.copyRecursively, если какие-либо каталоги на пути к target отсутствуют, они не будут созданы автоматически. Чтобы создать необходимые промежуточные каталоги, можно использовать функцию createParentDirectories:
sourcePath.copyToRecursively(
destinationPath.createParentDirectories(),
followLinks = false
)
Если элемент, на который указывает этот путь, является каталогом, эта функция рекурсивно копирует сам каталог и его содержимое. В противном случае функция копирует только этот элемент.
Если при попытке прочитать, открыть или скопировать какой-либо элемент в исходном поддереве возникает исключение, дальнейшие действия зависят от результата вызова onError, которому в качестве аргументов передаются исходный и целевой пути, вызвавшие ошибку, а также само исключение. Если onError выбрасывает исключение, функция немедленно завершается с этим исключением. По умолчанию onError повторно выбрасывает исключение. Доступные варианты см. в разделе OnErrorResult.
Эта функция выполняет операцию «объединения каталогов». Если элемент в исходном поддереве является каталогом, а соответствующий элемент в целевом поддереве уже существует и также является каталогом, функция ничего не делает. В противном случае параметр overwrite определяет, следует ли перезаписывать существующие элементы назначения. Атрибуты исходного элемента, например дата создания или изменения, не копируются.
Параметр followLinks влияет только на символические ссылки в исходном поддереве и определяет, копировать ли саму символическую ссылку или элемент, на который она указывает. Символические ссылки в целевом поддереве не отслеживаются, то есть элемент не копируется в место, на которое указывает символическая ссылка. Если место назначения копирования является символической ссылкой, она перезаписывается либо выбрасывается исключение — в зависимости от значения overwrite. Обратите внимание: символические ссылки на пути к корням исходного и целевого поддеревьев всегда отслеживаются.
Чтобы задать собственную логику копирования, используйте перегруженную версию, принимающую лямбда-выражение copyAction.
Возвращаемое значение
путь target.
Параметры
путь назначения, в который рекурсивно копируется этот элемент.
функция, определяющая дальнейшие действия при возникновении ошибки. По умолчанию повторно выбрасывает исключение.
false, чтобы скопировать саму символическую ссылку, а не цель, на которую она указывает. true, чтобы рекурсивно скопировать цель символической ссылки.
false, чтобы выбросить исключение, если элемент назначения уже существует. true, чтобы перезаписывать существующие элементы назначения.
Исключения
если элемент, на который указывает этот путь, не существует.
если исходное поддерево содержит элемент с недопустимым именем, например "." или "..". Это исключение передаётся в onError для обработки.
если при копировании возникают ошибки. Это исключение передаётся в onError для обработки.
если при рекурсивном копировании обнаружен цикл. Это исключение передаётся в onError для обработки.
если установлен менеджер безопасности и доступ к элементу в исходном или целевом поддереве запрещён. Это исключение передаётся в onError для обработки.
fun Path.copyToRecursively(target: Path, onError: (source: Path, target: Path, Exception) -> OnErrorResult = { _, _, exception -> throw exception }, followLinks: Boolean, copyAction: CopyActionContext.(source: Path, target: Path) -> CopyActionResult = { src, dst -> src.copyToIgnoringExistingDirectory(dst, followLinks) }): Path
Рекурсивно копирует этот каталог и его содержимое по указанному пути назначения target. Обратите внимание: если эта функция выбрасывает исключение, часть содержимого уже могла быть скопирована.
В отличие от File.copyRecursively, если какие-либо каталоги на пути к target отсутствуют, они не будут созданы автоматически. Чтобы создать необходимые промежуточные каталоги, можно использовать функцию createParentDirectories:
sourcePath.copyToRecursively(
destinationPath.createParentDirectories(),
followLinks = false
)
Если элемент, на который указывает этот путь, является каталогом, эта функция рекурсивно копирует сам каталог и его содержимое. В противном случае функция копирует только этот элемент.
Если при попытке прочитать, открыть или скопировать какой-либо элемент в исходном поддереве возникает исключение, дальнейшие действия зависят от результата вызова onError, которому в качестве аргументов передаются исходный и целевой пути, вызвавшие ошибку, а также само исключение. Если onError выбрасывает исключение, функция немедленно завершается с этим исключением. По умолчанию onError повторно выбрасывает исключение. Доступные варианты см. в разделе OnErrorResult.
Операция копирования выполняется с помощью copyAction. По умолчанию copyAction выполняет операцию «объединения каталогов». Если элемент в исходном поддереве является каталогом, а соответствующий элемент в целевом поддереве уже существует и также является каталогом, функция ничего не делает. В противном случае элемент копируется с помощью sourcePath.copyTo(destinationPath, *followLinksOption), которая не копирует атрибуты исходного элемента и выбрасывает исключение, если элемент назначения уже существует.
Параметр followLinks влияет только на символические ссылки в исходном поддереве и определяет, копировать ли саму символическую ссылку или элемент, на который она указывает. Символические ссылки в целевом поддереве не отслеживаются, то есть элемент не копируется в место, на которое указывает символическая ссылка. Если место назначения копирования является символической ссылкой, выбрасывается исключение. Обратите внимание: символические ссылки на пути к корням исходного и целевого поддеревьев всегда отслеживаются.
Если предоставлена пользовательская реализация copyAction, рекомендуется согласовать её поведение со значением followLinks. Доступные варианты см. в разделе CopyActionResult.
Если copyAction выбрасывает исключение, оно передаётся в onError для обработки.
Возвращаемое значение
путь target.
Параметры
путь назначения, в который рекурсивно копируется этот элемент.
функция, определяющая дальнейшие действия при возникновении ошибки. По умолчанию повторно выбрасывает исключение.
false, чтобы скопировать саму символическую ссылку, а не цель, на которую она указывает. true, чтобы рекурсивно скопировать цель символической ссылки.
функция, вызываемая для копирования исходных элементов в пути назначения, корнем которых является target. По умолчанию выполняет операцию «объединения каталогов».
Исключения
если элемент, на который указывает этот путь, не существует.
если исходное поддерево содержит элемент с недопустимым именем, например "." или "..". Это исключение передаётся в onError для обработки.
если при копировании возникают ошибки. Это исключение передаётся в onError для обработки.
если при рекурсивном копировании обнаружен цикл. Это исключение передаётся в onError для обработки.
если установлен менеджер безопасности и доступ к элементу в исходном или целевом поддереве запрещён. Это исключение передаётся в onError для обработки.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.io.path/copy-to-recursively.html