2010-03-18 5 views
8

J'ai renvoie null, l'objet fichier suivant pointant vers un répertoire via un lien symbolique,listFiles() de Fichier ne fonctionne pas sur les liens symboliques?

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

ListFiles() est-ce à cause du lien symbolique? Si oui, comment vais-je procéder si je veux vraiment lister les fichiers dans la barre en utilisant le chemin qui contient un lien symbolique?

Répondre

14

D'après ce que j'ai vu tout googler ce comportement déconcertant, Java exige que vous appelez .getCanonicalFile() sur un File dont le chemin contient un lien avant de pouvoir l'utiliser dans d'autres opérations de fichiers .

Alors:

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

..extending ce @mickthompson a suggéré, en utilisant le NIO File library (> Java 7) vous pouvez:

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 est facilement converti en sorte que tous File votre ancien code Java IO peut être conservé en toute sécurité, @voyezPath#toFile().

0

Ceci est corrigé pour la version 3.0.1. Après cela, essayez-le et faites-nous savoir si cela vous pose toujours un problème en ouvrant un nouveau bug, en renvoyant à this one pour le contexte.

Questions connexes