2010-03-18 15 views
8

Mam następujący obiekt File wskazuje na katalog przez dowiązania symbolicznego,listFiles() pliku nie działa na dowiązaniach symbolicznych?

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

Listfiles() zwraca null, czy to ze względu na miejsce linku? jeśli tak, to jak to zrobić, jeśli naprawdę chcę wyświetlić listę plików na pasku, używając ścieżki zawierającej dowiązanie symboliczne?

Odpowiedz

14

Zgodnie z tym co widziałem podczas Googling ten zaskakujący zachowanie, Java wymaga, aby zadzwonić .getCanonicalFile() na File którego ścieżka zawiera link, zanim będzie można go używać w innych operacji na plikach .

Więc:

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

..extending co @mickthompson zasugerował, używając NIO File library (> Java 7) można:

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 jest łatwo przekształca się File więc wszystko Twój stary kod Java IO można bezpiecznie przechowywać, @seePath#toFile().

0

Jest to poprawione dla wersji 3.0.1. Po tym wydaniu wypróbuj go i daj nam znać, jeśli nadal jest to dla Ciebie problem, otwierając nowy błąd, odwołując się do kontekstu z this one.

Powiązane problemy