Heim > Java > javaLernprogramm > Hauptteil

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
Freigeben: 2024-10-29 14:07:29
Original
711 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!