Heim >Java >javaLernprogramm >Ist der Vergleich von „getAbsolutePath()' und „getCanonicalPath()' eine zuverlässige Methode, um festzustellen, ob ein Verzeichnis in Java 1.6 ein symbolischer Link ist?

Ist der Vergleich von „getAbsolutePath()' und „getCanonicalPath()' eine zuverlässige Methode, um festzustellen, ob ein Verzeichnis in Java 1.6 ein symbolischer Link ist?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 14:07:29776Durchsuche

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

Ermitteln symbolischer Links in Java 1.6

In einem Java-Programm, das auf Unix-Systemen läuft, ist die Unterscheidung zwischen tatsächlichen Verzeichnissen und symbolischen Links unerlässlich. In dieser Frage wird eine Methode zum Identifizieren symbolischer Links zu Verzeichnissen mithilfe einer bestimmten Bedingung untersucht.

Frage:

Kann im Kontext einer DirectoryWalker-Klasse der folgende Ansatz verwendet werden? um genau zu bestimmen, ob eine bekannte Verzeichnisinstanz einen symbolischen Link darstellt:

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

Antwort:

Während der bereitgestellte Ansatz eine gängige Technik zur Identifizierung möglicher symbolischer Links ist, Es kann aus folgenden Gründen nicht als zuverlässig angesehen werden:

  • Potenzielle Fehlalarme: Eine Diskrepanz zwischen den absoluten und kanonischen Pfaden kann sogar bei tatsächlichen Verzeichnissen, wie z. B. bereitgestellten Netzwerklaufwerken, auftreten.
  • Plattformabhängigkeit: Das Verhalten von Dateipfaden kann je nach Betriebssystem und Dateisystem variieren.

Anstatt sich auf die absoluten und kanonischen Pfade zu verlassen Für die Datei selbst wird empfohlen, den kanonischen Pfad des übergeordneten Verzeichnisses zu verwenden. Dieser Ansatz ist genauer bei der Identifizierung symbolischer Links.

Hier ist ein Beispiel von Apache Commons, das diese Technik implementiert:

<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>

Das obige ist der detaillierte Inhalt vonIst der Vergleich von „getAbsolutePath()' und „getCanonicalPath()' eine zuverlässige Methode, um festzustellen, ob ein Verzeichnis in Java 1.6 ein symbolischer Link ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn