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>
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 :
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("File must not be null"); 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>
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!