2010-03-18 9 views
8

Ich habe folgendes File-Objekt in ein Verzeichnis über symbolische Verbindung zeigt,listFiles() von Datei funktioniert nicht auf symbolischen Links?

File directory = new File("/path/symlink/foo/bar"); 
String[] files = directory.listFiles(); 

Listfiles() gibt null, dann ist dies wegen der Symlink? Wenn ja, wie gehe ich vor, wenn ich die Dateien in der Leiste mit dem Pfad, der einen Symlink enthält, wirklich auflisten möchte?

Antwort

14

Nach dem, was ich gesehen habe, während dieses rätselhafte Verhalten googeln, Java erfordert, dass Sie .getCanonicalFile() auf einem File, deren Pfad aufrufen enthält einen Link, bevor Sie es in anderen Dateioperationen verwenden können .

So:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile(); 
String[] files = directory.listFiles(); 
0

..extending was vorgeschlagen @mickthompson, mit dem NIO File library (> Java 7) können Sie:

Path link = Paths.get("/path/symlink/foo/bar"); 
if (Files.isSymbolicLink(link)) { 
    link = Files.readSymbolicLink(link); 
} 

Path[] files = Files.list(link).toArray(size -> new Path[size]); 

Path leicht zu File umgewandelt wird, so dass alle Ihr alter Java IO Code kann sicher verwahrt werden, @seePath#toFile().

0

Dies ist für die Version 3.0.1 behoben. Nachdem dies veröffentlicht wurde, versuchen Sie es und lassen Sie uns wissen, ob es immer noch ein Problem für Sie ist, indem Sie einen neuen Fehler öffnen, indem Sie zurück auf this one für den Kontext verlinken.

Verwandte Themen