Что такое канонический путь к файлу?

Я изучаю Java и вот что понял относительно разных путей:

Относительный - неполный путь, который существует относительно какой-то директории, например : \data\file.txt Абсолютный - полный путь, начиная с диска: C:\users\data\file.txt

А что такое канонический путь и зачем он нужен? Я пытался разобраться в англоязычных источниках (плохо знаю английский), но понял только то, что в каноническом пути отсутствуют динамические ссылки (что это?) и вещи вида: ...\ (опять же, что это?).

Разъясните пожалуйста простым языком, что это такое.


Ответы (1 шт):

Автор решения: Roman Bush

Честно скажу, я первый раз столкнулся с этим названием. Но первая же ссылка объясняет вот что: В разных операционных средах (не в винде), есть возможность делать путь к конкретному файлу таким, который в винде не будет работать. Например, в 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

Оба эти пути верны. Но второй является каноничным. Грубо говоря - пользователи виндоуз всегда пользуются только каноничным путём.

→ Ссылка