Предположим, я пишу функцию для создания пути к файлу с заданным базовым путем и относительным путем:
def buildPath(basePath: String, relativePath: String) = ???
buildPath("a/b/c/d", "x") // a/b/c/x
buildPath("a/b/c/d", "../../x") // a/x
buildPath("a/b/c/d", "../../../x") // x
buildPath("a/b/c/d", "../e/x") // a/b/c/e/x
Я могу написать buildPath
, используя java.io.File
:
def buildPath(basePath: String, relativePath: String): String = {
val baseFile = new java.io.File(basePath)
val toRemove = baseFile.getAbsolutePath.dropRight(baseFile.getPath.length)
val file = new java.io.File(baseFile.getParentFile, relativePath)
file.getCanonicalPath.drop(toRemove.length)
}
Эта реализация работает, но выглядит ужасно. Как бы вы улучшили это?