2013-07-11 7 views
-1

Quelqu'un peut-il m'aider avec ce scénario?Java: vérifier si un fichier est présent

J'ai une méthode qui, lorsqu'elle est exécutée, génère un certain nombre de fichiers. Les fichiers peuvent prendre de quelques secondes à une minute pour être générés au lieu d'attendre 2 minutes à chaque fois que j'essaie de regarder le nombre de fichiers dans le dossier, puis vérifier chaque seconde jusqu'à 2 minutes pour le nombre de fichiers à monter.

Si le nombre de fichiers ne monte pas en 2 minutes, je veux juste continuer avec le reste de la méthode au lieu de lancer une exception et de quitter.

Le problème est la première fois qu'il s'exécute quand il arrive à new File(generatedFilesFolder).listFiles().length; il lève une exception de pointeur null car le fichier generatedFolderFolder est vide à ce stade.

Je pourrais faire cette vérification après le generate.next() mais ensuite je devrais dormir ce qui irait à l'encontre du point de ce que je tente d'archiver.

S'il vous plaît quelqu'un peut-il me dire une meilleure façon? J'ai essayé de changer l'int en un Integer à la place mais il a quand même jeté une exception.

int actualFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
generate.next(); 
///Now I want to give each file 2 minutes to generate otherwise catch and 
// carry on with rest of method. 
try { 
    int currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    int counter = 0; 
    while ((currentFilesGenerated < actualFilesGenerated) & counter < 120) { 
    Thread.sleep(1000); 
    currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    counter++; 
    System.out.println("actualFilesGenerated: " + actualFilesGenerated 
     + " currentFilesGenerated: " + currentFilesGenerated + "counter: " 
     + counter); 
    } 
} catch (InterruptedException e1) { 
    e1.printStackTrace(); 
} 
///rest of method here 
+0

Vérifiez le fichier avec la méthode 'File.exists()' –

+0

'Fichier f = nouveau fichier (generatedFilesFolder);' then 'currentFilesGenerated = (f.exists() == false) - 1: f.listFiles(). Length' –

Répondre

3

Vous pouvez utiliser File.exists() pour vérifier l'existence d'une méthode File

File f = new File(generatedFilesFolder) 
if(f.exists()) { 
    // file exists and do the operation 
} 
else { 
    f.createNewFile(); //or f.mkdir() to create directory 
} 
+0

Si 'generatedFilesFolder' nomme un dossier, peut-être' f.mkdir() '. – johnchen902

+0

@ johnchen902 vrai, j'ai mis à jour la réponse. Merci de l'avoir soulevé – sanbhat

0

vous pouvez utiliser exists() de la classe de fichiers pour vérifier si ce fichier est présent, par exemple

File f=new File(path); 
if(f.exists()) { 
    ..... 
} 
0

il existe une méthode exist. Vérifiez donc si le répertoire existe avant d'obtenir la liste des fichiers

0

faites une vérification avant de l'utiliser comme.

File file = new File(generatedFilesFolder); 
if(file.exists() && file.isDirectory()) { 
     // do something 
} 
1

Le problème est la première fois il court quand il arrive à nouveau fichier (generatedFilesFolder) .listFiles() de longueur. il renvoie une exception de pointeur null car le fichier generatedFilesFolder est vide à ce stade.

Cela ne peut pas être vrai. Si generatedFilesFolder est effectivement un chemin d'accès à un répertoire mais qu'il n'y a pas de fichiers, cela ne lancera pas un NPE mais retournera un tableau vide.

Par conséquent, vous devez générer votre répertoire avant d'aller plus loin:

final File file = new File(generatedFilesFolder); 

if (file.exists()) { 
    if (!file.isDirectory()) 
     throw new IllegalStateException("not a directory"); 
} else { 
    if (!files.mkdirs()) 
     throw new IllegalStateException("cannot create directory"); 
} 

// go on 

Enfin: si vous utilisez Java 7, oublier File. Utilisez Files. Qui a un observateur de répertoire ...

Questions connexes