CanonicalFileUtils.java.. и ., а также нормализует разделители пути через File.getCanonicalPath(). Корректно обрабатывает ошибки ввода-вывода, возвращаясь к getAbsolutePath(). Предоставляет перегрузки на основе строк и объектов File для разрешения пути. Используется везде, где ProjectForge необходимо сравнивать пути к файлам или обеспечивать единообразное представление пути.java.io.File — абстракция файла JDKjava.io.IOException — проверяемое исключение от getCanonicalPath()org.slf4j.Logger — журналирование ошибок при сбоях ввода-выводаВозвращает канонический путь файла в виде строки. Если getCanonicalPath() выбрасывает IOException (например, файл не существует и файловая система не может разрешить его каноническую форму), возвращается getAbsolutePath() и ошибка записывается в журнал.
Та же логика, но возвращает объект File через getCanonicalFile() / getAbsoluteFile().
Удобная перегрузка, которая оборачивает строковый путь в new File(path) и делегирует выполнение absolute(File).
Метод Java File.getCanonicalPath() предоставляет несколько гарантий, которых нет у getAbsolutePath():
. (текущий каталог) и .. (родительский каталог) разрешаются// схлопываетсяЭто критически важно для операций, чувствительных к безопасности, где пути из пользовательского ввода должны сравниваться с разрешёнными путями — два разных строковых представления могут ссылаться на один и тот же файл (например, /home/user/../user/file и /home/user/file).
Класс использует шаблон плавной деградации: если каноническое разрешение не удаётся (IOException), он возвращается к абсолютному пути и записывает ошибку в журнал. Это важно, поскольку getCanonicalPath() может выбросить IOException по причинам, не зависящим от приложения (например, права доступа к файловой системе, проблемы с монтированием NFS или отсутствие файла). Запасной вариант гарантирует, что приложение продолжит работу, хотя и с потенциально ненормализованным путём.
Все методы корректно обрабатывают входной null — возвращают null без выбрасывания NullPointerException. Это упрощает код вызывающего, устраняя необходимость проверок на null перед вызовом утилиты.
CanonicalFileUtils используется в таких сценариях, как:
..Внутренняя ошибка при попытке получить канонический путь" может вводить в заблуждение — IOException от getCanonicalPath() не обязательно является "внутренней ошибкой", а часто представляет собой условие окружения (отсутствующий файл, отказано в доступе). Возврат к getAbsolutePath() молча принимает потенциально ненормализованный путь.FileHelper. Это следует принципу единственной ответственности, сохраняя утилиты сфокусированными и тестируемыми.868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024 -> 2025. b6092df09 Авторские права 2023 -> 2024 ab45d51fa Авторские права 2001-2022 -> 2001-2023. 5f7ef41b8 Авторские права 2021 -> 2022 ceb63e8a1 Заголовок исходного кода: (C) 2001-2021. 7c79f1922 Авторские права в заголовке исходного кода -> 2020. bd25a85fb WIP: Мастер настройки (Swing и Lanterna)