2017-10-14 3 views
-1

J'ai essayé à la fois File.listFiles() et Files.fileTreeTraverser(). De gava breadthFirstTraversal (dir).Java File I/O semble cesser de fonctionner après un certain temps programme - pas d'erreurs

if (dir.exists()) { 
     for (File f : Files.fileTreeTraverser().breadthFirstTraversal(dir)) { 
      if (f.isFile()) { 
       if (f.getName().endsWith(EXT)) { 
        matches.add(f); 
       } else { 
        if (!f.getName().endsWith(".ini")) { 
         log.db("No match: " + f.getName()); 
        } 
       } 
      } 
     } 
    } else { 
     log.error("No directory found."); 
     dir.mkdirs(); 
    } 
    log.db(matches); 

Dans ces deux cas, après que le programme fonctionne pendant un certain temps (l'exécution de ce code particulier 2x par seconde), correspond à vide tourne. Pour Guava, il n'y a pas d'erreur du tout. Pour File.listFiles() de Java, dir.listFiles() devient null.

Ce code s'exécute sous Windows et ne fait rien d'autre dans le répertoire que l'écriture occasionnelle d'un fichier. Il n'y a qu'un seul fichier dans le répertoire.

Existe-t-il une règle dans Windows qui empêche le fonctionnement des fichiers d'E/S après un certain temps?

+0

Juste une supposition dans le bleu: Avez-vous ouvert ce fichier plusieurs fois sans le fermer correctement après cela? – Brotcrunsher

+0

Où est ce que vous appelez File.listFiles()? Et non, il n'y a pas de telle règle. – Oleg

+0

@Brotcrunsher, je ne l'ouvre pas, seulement obtenir les noms de fichiers et supprimer et créer des fichiers. Aucun flux d'entrée ou de sortie n'est ouvert. – misaka

Répondre

-1

Le problème était que certains de mes autres codes, qui utilisaient JNA (incorrectement), ne parvenaient pas à libérer correctement les descripteurs de fichiers. Finalement, la JVM a manqué de poignées pour donner et n'a plus été capable de lister les fichiers.