Java: überprüfen Sie den symbolischen link, Datei Existenz
Sprechen wir über java 1.6 hier. Da symoblic link wird noch nicht unterstützt, wie kann untersuchen die Existenz von Ihnen.
1: sagen Sie, ob die link-Datei selbst existiert (true zurückgegeben, auch wenn der link defekt ist)
2: Folgen Sie dem link und sagen Sie, ob die zugrunde liegenden Datei vorhanden ist.
Gibt es wirklich keine Möglichkeit um dies zu realisieren, außer JNI?
Eine bessere Lösung kopiert von Apache FileUtils finden Sie hier: stackoverflow.com/questions/813710/...
InformationsquelleAutor solotim | 2010-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
sieht so aus für heute... es sei denn, Sie gehen mit openjdk http://openjdk.java.net/projects/nio/javadoc/java/nio/file/attribute/BasicFileAttributes.html#isSymbolicLink()
java.nio.file.Files.isSymbolicLink(Path path)
.Link jetzt kehrt 404, der Grund, warum Sie sollten zusätzliche Pflege vor dem hinzufügen der link zu Ihrer Antwort.
InformationsquelleAutor
Es ist langsam, aber man konnte vergleichen getAbsolutePath() und getCanonicalPath() von einer Datei. So verwenden Sie nur außerhalb einer performance-kritischen code-Pfad.
InformationsquelleAutor
im folgenden sollten Sie beginnen:BEARBEITEN : Die oben genannten nicht funktionieren, wie ich dachte, weil Datei.isDirectory() und file.isFile() beheben einen symbolischen link. (Wir Leben und lernen!)
Wenn Sie möchten, eine genauere Bestimmung, die Sie verwenden müssen, JNI, um die entsprechenden native OS-spezifische Bibliothek ruft.
Es nicht auf Linux. Aber leider-Datei.isFile() und file.isDirectory() beheben einen symbolischen link und ein Ergebnis zurückgeben, basierend auf dem Typ des aufgelösten Objekts.
Es false zurück auf Linux. Sie können hierzu auch die Bewertung Teil der bugs.sun.com/bugdatabase/view_bug.do?bug_id=4956115.
er kehrte
true
auf Linux, wenn ich es getestet habe für einen symbolischen link auf eine existierende Datei. Der Punkt ist, dass es testet, ob der link UND das Linkziel existiert.Ja, Stephan, Sie haben Recht, ich bin falsch. 😛
InformationsquelleAutor
hmm..noch nicht unterstützt..wird es irgendwann unterstützt werden ist die Frage, die mir in den Sinn kommt uns in dieser Frage...symbolische links werden Plattform-spezifische und Java soll b Plattform-unabhängig. ich bezweifle, ob etwas derartiges möglich ist, mit java als solche..Sie haben vielleicht to resort to native code für diesen Teil und verwenden JNI, um es zu überbrücken mit dem rest von Ihrem Programm in java.
hmm..das ist interessant..möchten Sie vielleicht einen Blick auf diese : stackoverflow.com/questions/813710/...
InformationsquelleAutor
#2 ist ganz einfach: verwenden Sie
File.isFile
etc., die traverse den link. Der schwierige Teil ist die #1.Also, wenn Sie nicht verwenden können
java.nio.file
, und vermeiden will, JNI etc., das einzige, was ich gefunden, die funktioniert:Nicht sehr effizient, aber unkompliziert.
InformationsquelleAutor