Pensé que podría compartir algo de buena suerte que tuve al tratar este problema. Estoy usando JDK 1.6.0_23 y no puedo beneficiarme de NIO2. Estoy compilando y ejecutando SOLAMENTE Windows 7/x64, por lo que el kilometraje puede variar en otros entornos. Lamentablemente, otras soluciones aquí no me funcionaron para evitar las NullPointerExceptions causadas cuando intentaba atravesar un cruce (probablemente porque junction! = Symlink ....). Si bien no estoy limitado por la versión JDK, decidí seguir con el problema un poco más.
Tenía este código que causaría una NullPointerException si se usa en un enlace simbólico o cuando se encuentra con el directorio 'System Volume Information'. (Nota, traverseItem.f() devuelve un objeto de tipo java.io.File)
if (traverseItem.f().isDirectory) {
for (File item : traverseItem.f().listFiles()) {
lo tanto, es supuestamente un directorio pero llamar listFiles() sobre ella provoca un NPE. ¿Qué hacer? Espié el método list() y me pregunté si mostraría el mismo comportamiento.Lo que descubrí fue lo siguiente:
La lista de llamadas() en un archivo que describe una carpeta vacía devuelve una matriz String [] de longitud cero. Sin embargo, la lista() en un archivo que describe una unión que de otro modo chocar de listFiles() llamando devuelve null
yo era capaz de evitar los NullPointerExceptions mediante la adición de la siguiente prueba antes de llamar listFiles()
String[] contents = traverseItem.f().list();
if (contents != null) { //Non-traversible if null, possibly junction or ???
Queda por probar exhaustivamente todos los casos de unión, enlace simbólico, enlace rígido, y me atrevo a mencionarlo, atajo, pero esto puede ayudar a algunos.
Relacionados con http://stackoverflow.com/questions/2175673/java-check-symbolic-link-file-existence – Gray
Java 1.7: [java.nio.Files.isSymbolicLink (Path)] (http: // docs .oracle.com/javase/7/docs/api/java/nio/file/Files.html # isSymbolicLink% 28java.nio.file.Path% 29) - más una nota para mí - ¡sigo terminando aquí! –