Ho pensato di condividere la buona fortuna che avevo con questo problema. Sto usando JDK 1.6.0_23 e quindi non posso beneficiare di NIO2. Sto costruendo e girando su Windows 7/x64 SOLO, quindi il chilometraggio può variare in altri ambienti. Sfortunatamente, altre soluzioni qui non hanno funzionato per evitare le NullPointerException causate durante il tentativo di attraversare una giunzione (probabilmente perché junction! = Symlink ....). Mentre non sono vincolato dalla versione di JDK, ho deciso di mantenere il problema ancora per un po '.
Avevo questo codice che causerebbe un NullPointerException se utilizzato su un collegamento simbolico o quando si incontra la directory 'System Volume Information'. (Nota, traverseItem.f() restituisce un oggetto di tipo java.io.File)
if (traverseItem.f().isDirectory) {
for (File item : traverseItem.f().listFiles()) {
Quindi, è presumibilmente una directory, ma chiamando ListFiles() su di esso provoca un NPE. Cosa fare? Ho spiato il metodo list() e mi chiedevo se avrebbe mostrato lo stesso comportamento.Quello che ho scoperto è stato il seguente:
La lista di chiamate() su un file che descrive una cartella vuota restituisce una stringa [] di lunghezza zero. Tuttavia, la lista() in un file che descrive un incrocio che altrimenti andare in crash da ListFiles() chiamando restituisce null
sono stato in grado di evitare le NullPointerExceptions aggiungendo il seguente test prima di chiamare ListFiles()
String[] contents = traverseItem.f().list();
if (contents != null) { //Non-traversible if null, possibly junction or ???
Resta da testare in modo esaustivo tutti i casi di giunzione, collegamento simbolico, hard link e oserei menzionarlo, scorciatoia, ma questo può aiutare alcuni.
Correlato a http://stackoverflow.com/questions/2175673/java-check-symbolic-link-file-existence – Gray
Java 1.7: [java.nio.Files.isSymbolicLink (Percorso)] (http: // docs .oracle.com/javase/7/docs/api/java/nio/file/Files.html # isSymbolicLink% 28java.nio.file.Path% 29) - più una nota per me stesso - Continuo a finire qui! –