2010-03-18 12 views
8

Tengo el siguiente objeto File que apunta a un directorio a través del enlace simbólico,listFiles() ¿El archivo no funciona en enlaces simbólicos?

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

listFiles() devuelve un valor nulo, es esto debido al enlace simbólico? En caso afirmativo, ¿cómo voy a hacer esto si realmente quiero enumerar los archivos en la barra usando la ruta que contiene un enlace simbólico?

Respuesta

14

De acuerdo con lo que he visto, mientras que buscando en Google este comportamiento desconcertante, Java requiere que llame .getCanonicalFile() en un File cuya ruta contiene un enlace antes de poder utilizarlo en otras operaciones de archivo .

Así:

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

..extending lo @mickthompson sugirió, mediante el NIO File library (> Java 7) se puede:

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 se convierte fácilmente en File por lo que todo su antiguo código Java IO se puede guardar de manera segura, @seePath#toFile().

0

Esto se corrigió para la versión 3.0.1. Después de que se publique, pruébalo y cuéntanos si sigue siendo un problema para ti abriendo un nuevo error, vinculándolo al contexto this one.

Cuestiones relacionadas