2013-07-18 10 views
7

Ho seguito questo question:Java - Leggere molti txt file in una cartella e elaborarli

Ora, nel mio caso ho 720 file con nomi in questo modo: "dom 24 mar 2013_00.50.35_128.txt", ogni il file ha una data e ora differenti. Nella fase di test ho usato Scanner, con un file txt specifico, per fare alcune operazioni su di esso:

Scanner s = nuovo Scanner (nuovo file ("stuff.txt"));

La mia domanda è:

Come posso riutilizzare scanner e leggere tutti i 720 file senza dover impostare il nome preciso sullo scanner?

Grazie

+0

Vedi qui http://stackoverflow.com/questions/189094/how-to-scan-a-folder-in-java – sotix

+0

Puoi solo leggere tutti i file nella directory o hai più file che non vuoi leggere con schemi di denominazione diversi nella directory? –

+1

Non puoi. Verrà creato un nuovo scanner per ogni file. –

risposta

14

Supponendo di avere tutti i file in un unico luogo:

File dir = new File("path/to/files/"); 

for (File file : dir.listFiles()) { 
    Scanner s = new Scanner(file); 
    ... 
    s.close(); 
} 

Si noti che se si dispone di tutti i file che non si desidera includere, si può dare un argomento listFiles()FileFilter a filtrarli.

+0

Sì, tutti i file si trovano nella stessa cartella. – alessandrob

+2

Dannazione, mi hai appena battuto :) +1 per picchiarmi alla risposta –

+2

+1 per aver chiuso lo scanner. –

6

Sì, creare l'oggetto file puntandolo in una directory e quindi elencare i file di tale directory.

File dir = new File("Dir/ToYour/Files"); 

if(dir.isDir()) { 
    for(File file : dir.listFiles()) { 
     if(file.isFile()) { 
     //do stuff on a file 
     } 
    } 
} else { 
    //do stuff on a file 
} 
1
File file = new File(folderNameFromWhereToRead); 

    if(file!=null && file.exists()){ 
     File[] listOfFiles = file.listFiles(); 

     if(listOfFiles!=null){ 

      for (int i = 0; i < listOfFiles.length; i++) { 
       if (listOfFiles[i].isFile()) { 
         // DO work 
       } 
      } 
     } 
    } 
+0

Non sono esperto, ma penso che il tuo 'if (listOfFiles! = Null)' non sia necessario. Hai appena creato 'listOfFiles', quindi come può essere nullo? –

+0

Uhgh ... lo stesso con il tuo 'if (file! = Null)' ... stai verificando se esiste un riferimento a un oggetto che hai appena creato prima del test! –

+0

Il controllo Null su 'lisOfFiles' va bene (potrebbe accadere se il percorso esiste ma è un file) ma sul' file' non è richiesto. +1 per 'isFile()' controlla comunque. –

3

Si può provare questo in questo modo

File folder = new File("D:\\DestFile"); 
File[] listOfFiles = folder.listFiles(); 

for (File file : listOfFiles) { 
if (file.isFile()&&(file.getName().substring(file.getName().lastIndexOf('.')+1).equals("txt"))) { 
    // Scanner 
    } 
} 
+0

+1 per il controllo 'isFile()'. –

Problemi correlati