Функция relativeTo

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

Импорт

kotlinimport java.io.File

Синтаксис

kotlinfun File.relativeTo(target: File): File

Пример

Получим относительный путь от директории "/home/user/docs" к файлу "/home/user/docs/reports/annual.pdf":

kotlinval baseDir = File("/home/user/docs")
val targetFile = File("/home/user/docs/reports/annual.pdf")
val res = targetFile.relativeTo(baseDir)
println(res.path)

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

kotlinString "reports/annual.pdf"

Пример

Получим относительный путь от файла "/var/www/index.html" к файлу "/var/www/css/style.css":

kotlinval baseFile = File("/var/www/index.html")
val targetFile = File("/var/www/css/style.css")
val res = targetFile.relativeTo(baseFile)
println(res.path)

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

kotlinString "../css/style.css"

Пример

Попытка получить относительный путь между файлами на разных дисках вызовет исключение:

kotlinval baseFile = File("C:/Windows")
val targetFile = File("D:/Data")

try {
  val res = targetFile.relativeTo(baseFile)
  println(res.path)
} catch (e: IllegalArgumentException) {
  println("Error: " + e.message)
}

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

kotlinString "Error: this and base files have different roots"

Пример

Использование относительного пути для создания нового файла относительно текущего:

kotlinval currentDir = File("/projects/app")
val configFile = File("/projects/app/src/config/settings.json")

val relativePath = configFile.relativeTo(currentDir)
val newFile = File(currentDir, relativePath.path)

println("Relative path: " + relativePath.path)
println("Absolute path: " + newFile.absolutePath)

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

kotlinString "Relative path: src/config/settings.json"
String "Absolute path: /projects/app/src/config/settings.json"

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

  • функцию resolve,
    которая разрешает относительный путь относительно текущего файла
  • функцию resolveSibling,
    которая разрешает путь относительно родительской директории текущего файла
  • функцию normalize,
    которая нормализует путь, удаляя избыточные элементы
  • функцию toRelativeString,
    которая возвращает относительный путь в виде строки