Here's the complete HTML translated to Spanish, with `lang="es"`, the ES link active in the switcher, and `[ES]` appended to the title: ```html #1878: CanonicalFileUtils.java [ES]
EN · DE · RU · FR · ES

#1878: CanonicalFileUtils.java

projectforge-common/src/main/java/org/projectforge/common/CanonicalFileUtils.java Clase de utilidad — paquete org.projectforge.common, projectforge-common/src/main/java/org/projectforge/common/CanonicalFileUtils.java 67 líneas · 34 código · 27 comentarios · 6 en blanco
Utilidad de normalización de rutas de archivo que resuelve enlaces simbólicos, elimina componentes de ruta .. y ., y normaliza separadores de ruta mediante File.getCanonicalPath(). Maneja errores de E/S de forma elegante recurriendo a getAbsolutePath(). Proporciona sobrecargas basadas en cadenas y en objetos File para la resolución de rutas. Se utiliza en ProjectForge siempre que es necesario comparar rutas de archivo o garantizar una representación de ruta consistente.

Arquitectura

Importaciones

Operaciones principales

1. absolutePath(File file) → String

Devuelve la ruta canónica de un archivo como cadena. Si getCanonicalPath() lanza IOException (por ejemplo, el archivo no existe y el sistema de archivos no puede resolver su forma canónica), recurre a getAbsolutePath() y registra el error.

2. absolute(File file) → File

Misma lógica pero devuelve un objeto File mediante getCanonicalFile() / getAbsoluteFile().

3. absolute(String path) → File

Sobrecarga de conveniencia que envuelve una ruta de cadena en new File(path) y delega en absolute(File).

¿Por qué ruta canónica?

El método File.getCanonicalPath() de Java proporciona varias garantías que getAbsolutePath() no ofrece:

Esto es crítico para operaciones sensibles a la seguridad donde las rutas de entrada del usuario deben compararse con rutas permitidas — dos representaciones de cadena diferentes podrían referirse al mismo archivo (por ejemplo, /home/usuario/../usuario/archivo y /home/usuario/archivo).

Estrategia de manejo de errores

La clase utiliza un patrón de degradación gradual: si la resolución canónica falla (IOException), recurre a la ruta absoluta y registra el error. Esto es importante porque getCanonicalPath() puede lanzar IOException por razones fuera del control de la aplicación (por ejemplo, permisos del sistema de archivos, problemas de montaje NFS o que el archivo no exista). La alternativa garantiza que la aplicación continúe funcionando, aunque con una ruta potencialmente no normalizada.

Manejo de nulos

Todos los métodos manejan la entrada null de forma elegante — devolviendo null sin lanzar NullPointerException. Esto simplifica el código del llamante al eliminar la necesidad de comprobaciones de nulos antes de llamar a la utilidad.

Contexto de uso en ProjectForge

CanonicalFileUtils se utiliza en escenarios como:

El mensaje de registro "Error interno al intentar obtener la ruta canónica" es ligeramente engañoso — una IOException de getCanonicalPath() no es necesariamente un "error interno" sino a menudo una condición ambiental (archivo faltante, permiso denegado). La alternativa a getAbsolutePath() acepta silenciosamente una ruta potencialmente no normalizada.
La clase es intencionalmente mínima (3 métodos, ~30 líneas de lógica). Extrae una preocupación muy específica — normalización de rutas con alternativa gradual — de la clase más amplia FileHelper. Esto sigue el Principio de Responsabilidad Única, manteniendo las utilidades enfocadas y comprobables.

Historial de Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
b6092df09 Derechos de autor 2023 -> 2024
ab45d51fa Derechos de autor 2001-2022 -> 2001-2023.
5f7ef41b8 Derechos de autor 2021 -> 2022
ceb63e8a1 Encabezado de código fuente: (C) 2001-2021.
7c79f1922 Derechos de autor del encabezado fuente -> 2020.
bd25a85fb WIP: Asistente de configuración (Swing y Lanterna)