Функция relativeTo
Функция relativeTo вычисляет относительный путь
от текущего файла к указанному целевому файлу.
Применяется к объектам типа File и возвращает
новый объект File, представляющий относительный путь.
Если файлы находятся на разных корневых устройствах
или один из путей является относительным, функция
выбрасывает исключение IllegalArgumentException.
Импорт
import java.io.File
Синтаксис
fun File.relativeTo(target: File): File
Пример
Получим относительный путь от директории "/home/user/docs"
к файлу "/home/user/docs/reports/annual.pdf":
val baseDir = File("/home/user/docs")
val targetFile = File("/home/user/docs/reports/annual.pdf")
val res = targetFile.relativeTo(baseDir)
println(res.path)
Результат выполнения кода:
String "reports/annual.pdf"
Пример
Получим относительный путь от файла "/var/www/index.html"
к файлу "/var/www/css/style.css":
val baseFile = File("/var/www/index.html")
val targetFile = File("/var/www/css/style.css")
val res = targetFile.relativeTo(baseFile)
println(res.path)
Результат выполнения кода:
String "../css/style.css"
Пример
Попытка получить относительный путь между файлами на разных дисках вызовет исключение:
val 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)
}
Результат выполнения кода:
String "Error: this and base files have different roots"
Пример
Использование относительного пути для создания нового файла относительно текущего:
val 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)
Результат выполнения кода:
String "Relative path: src/config/settings.json"
String "Absolute path: /projects/app/src/config/settings.json"
Смотрите также
-
функцию
resolve,
которая разрешает относительный путь относительно текущего файла -
функцию
resolveSibling,
которая разрешает путь относительно родительской директории текущего файла -
функцию
normalize,
которая нормализует путь, удаляя избыточные элементы -
функцию
toRelativeString,
которая возвращает относительный путь в виде строки