EN · DE · RU · FR · ES

#1878: CanonicalFileUtils.java

projectforge-common/src/main/java/org/projectforge/common/CanonicalFileUtils.java Classe utilitaire — package org.projectforge.common, projectforge-common/src/main/java/org/projectforge/common/CanonicalFileUtils.java 67 lignes · 34 code · 27 commentaires · 6 vides
Utilitaire de normalisation de chemins de fichiers qui résout les liens symboliques, élimine les composants de chemin .. et ., et normalise les séparateurs de chemin via File.getCanonicalPath(). Gère les erreurs d'E/S avec élégance en revenant à getAbsolutePath(). Fournit des surcharges basées sur les chaînes et les objets File pour la résolution de chemins. Utilisé partout où ProjectForge doit comparer des chemins de fichiers ou garantir une représentation cohérente des chemins.

Architecture

Importations

Opérations principales

1. absolutePath(File file) → String

Retourne le chemin canonique d'un fichier sous forme de chaîne. Si getCanonicalPath() lève une IOException (par exemple, le fichier n'existe pas et le système de fichiers ne peut pas résoudre sa forme canonique), revient à getAbsolutePath() et enregistre l'erreur.

2. absolute(File file) → File

Même logique mais retourne un objet File via getCanonicalFile() / getAbsoluteFile().

3. absolute(String path) → File

Surcharge pratique qui encapsule un chemin chaîne dans new File(path) et délègue à absolute(File).

Pourquoi un chemin canonique ?

La méthode File.getCanonicalPath() de Java offre plusieurs garanties que getAbsolutePath() ne fournit pas :

C'est essentiel pour les opérations sensibles à la sécurité où les chemins provenant de l'utilisateur doivent être comparés à des chemins autorisés — deux représentations différentes d'une chaîne peuvent faire référence au même fichier (par exemple, /home/utilisateur/../utilisateur/fichier et /home/utilisateur/fichier).

Stratégie de gestion des erreurs

La classe utilise un modèle de dégradation progressive : si la résolution canonique échoue (IOException), elle revient au chemin absolu et enregistre l'erreur. Ceci est important car getCanonicalPath() peut lever une IOException pour des raisons indépendantes de la volonté de l'application (par exemple, permissions du système de fichiers, problèmes de montage NFS, ou fichier inexistant). La solution de repli garantit que l'application continue de fonctionner, bien qu'avec un chemin potentiellement non normalisé.

Gestion des valeurs nulles

Toutes les méthodes gèrent les entrées null avec élégance — retournant null sans lever de NullPointerException. Cela simplifie le code appelant en éliminant le besoin de vérifications null avant d'appeler l'utilitaire.

Contexte d'utilisation dans ProjectForge

CanonicalFileUtils est utilisé dans des scénarios tels que :

Le message de journal "Erreur interne lors de la tentative d'obtention du chemin canonique" est légèrement trompeur — une IOException de getCanonicalPath() n'est pas nécessairement une "erreur interne" mais souvent une condition environnementale (fichier manquant, permission refusée). Le repli vers getAbsolutePath() accepte silencieusement un chemin potentiellement non normalisé.
La classe est intentionnellement minimale (3 méthodes, ~30 lignes de logique). Elle extrait une préoccupation très spécifique — la normalisation des chemins avec repli progressif — de la classe plus large FileHelper. Cela suit le principe de responsabilité unique, en gardant les utilitaires ciblés et testables.

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
b6092df09 Droits d'auteur 2023 -> 2024
ab45d51fa Droits d'auteur 2001-2022 -> 2001-2023.
5f7ef41b8 Droits d'auteur 2021 -> 2022
ceb63e8a1 En-tête du code source : (C) 2001-2021.
7c79f1922 Droits d'auteur de l'en-tête source -> 2020.
bd25a85fb WIP : Assistant d'installation (Swing et Lanterna)