Что такое канонический путь к файлу?
Я изучаю Java и вот что понял относительно разных путей:
Относительный - неполный путь, который существует относительно какой-то директории, например : \data\file.txt Абсолютный - полный путь, начиная с диска: C:\users\data\file.txt
А что такое канонический путь и зачем он нужен? Я пытался разобраться в англоязычных источниках (плохо знаю английский), но понял только то, что в каноническом пути отсутствуют динамические ссылки (что это?) и вещи вида: ...\ (опять же, что это?).
Разъясните пожалуйста простым языком, что это такое.
Ответы (1 шт):
Честно скажу, я первый раз столкнулся с этим названием. Но первая же ссылка объясняет вот что: В разных операционных средах (не в винде), есть возможность делать путь к конкретному файлу таким, который в винде не будет работать. Например, в ext4 файловой системе можно сослаться вот так:
\var\some\there\here\where\not\be\..\..\point\file.txt
Это иногда имеет смысл, когда ты делаешь путь с помощью скрипта, который срабатывает из какой-то папки внутри системы и тупо подставляет "..\..\point\file.txt" к пути к текущему подкаталогу. Но в таком случае путь:
\var\some\there\where\point\file.txt
будет вести к этому же файлу. Так же, как путь:
..\..\point\file.txt тоже будет вести к этому файлу, если ты в
текущий момент находишься в папке:
\var\some\there\here\where\not\be\
Так вот. "Канонический путь" - это тот путь, который будет максимально простым и строгим. "каноничным". То есть, без всех этих странных конструкций. Там же, по ссылке, хороший пример:
absolute path: C:\abc\..\abc\file.txt
canonical path: C:\abc\file.txt
Оба эти пути верны. Но второй является каноничным. Грубо говоря - пользователи виндоуз всегда пользуются только каноничным путём.