Maison > Java > javaDidacticiel > La comparaison de `getAbsolutePath()` et `getCanonicalPath()` est-elle un moyen fiable de déterminer si un répertoire en Java 1.6 est un lien symbolique ?

La comparaison de `getAbsolutePath()` et `getCanonicalPath()` est-elle un moyen fiable de déterminer si un répertoire en Java 1.6 est un lien symbolique ?

Linda Hamilton
Libérer: 2024-10-29 14:07:29
original
840 Les gens l'ont consulté

Is comparing `getAbsolutePath()` and `getCanonicalPath()` a reliable way to determine if a directory in Java 1.6 is a symbolic link?

Détermination des liens symboliques en Java 1.6

Dans un programme Java fonctionnant sur les systèmes Unix, la distinction entre les répertoires réels et les liens symboliques est essentielle. Cette question explore une méthode d'identification des liens symboliques vers des répertoires à l'aide d'une condition spécifique.

Question :

Dans le contexte d'une classe DirectoryWalker, l'approche suivante peut-elle être utilisée pour déterminer avec précision si une instance d'annuaire connue représente un lien symbolique :

<code class="java">if (file.getAbsolutePath().equals(file.getCanonicalPath())) {
    // real directory ---> do normal stuff      
}
else {
    // possible symbolic link ---> do link stuff
}</code>
Copier après la connexion

Réponse :

Bien que l'approche proposée soit une technique courante pour identifier d'éventuels liens symboliques, il ne peut pas être considéré comme fiable pour les raisons suivantes :

  • Faux positifs potentiels : Une inadéquation entre les chemins absolus et canoniques peut se produire même pour les répertoires réels, tels que les lecteurs réseau montés.
  • Dépendance de la plate-forme :Le comportement des chemins de fichiers peut varier selon les différents systèmes d'exploitation et systèmes de fichiers.

Au lieu de s'appuyer sur les chemins absolus et canoniques du fichier lui-même, il est recommandé d’utiliser le chemin canonique du répertoire parent. Cette approche est plus précise pour identifier les liens symboliques.

Voici un exemple d'Apache Commons qui implémente cette technique :

<code class="java">public static boolean isSymlink(File file) throws IOException {
  if (file == null)
    throw new NullPointerException(&quot;File must not be null&quot;);
  File canon;
  if (file.getParent() == null) {
    canon = file;
  } else {
    File canonDir = file.getParentFile().getCanonicalFile();
    canon = new File(canonDir, file.getName());
  }
  return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal