2015-01-22 17 views
5

Questo mi fa impazzire. Ho il seguente codice che legge un file CSV e ri-formatta in una copia incolla pronto formato di array java:Scrittura di file Java Si interrompe in modo casuale?

CSVReader reader = new CSVReader(new FileReader(fileName), ',' , '"' , 0); 
    FileWriter writer = new FileWriter(outFile); 
    //Read CSV line by line and use the string array as you want 
    //Read all rows at once 
    List<String[]> allRows = reader.readAll(); 

    //print table header 
    //Read CSV line by line and use the string array as you want 
for(String[] row : allRows){ 
    System.out.println(Arrays.toString(row)); 
    writer.write("{"); 
    for(int lcv = 0;lcv<row.length;lcv++){ 
     if(lcv == row.length -1){ 
      writer.write(row[lcv]); 
     }else{ 
      writer.write(row[lcv]+","); 
     } 
    } 
    writer.write("},\n"); 
} 

Come si può vedere, il codice stampa i record nel file di consolare, così come al file per il mio incollare copia. Il codice funziona, nessun errore, ecc. Tuttavia, il file creato si arresta in modo casuale a metà dei record. Ho fatto un passo attraverso il codice e le chiamate di scrittura stanno funzionando, e la parte più strana è che la console stampa tutti i record bene, che DOVREBBE rispecchiare il file creato. C'è qualcuno che può spiegare perché il file non sta finendo ma la console è?

Altre informazioni. Il file iniziale era di 76 righe di circa 36 KB. Ho pensato che il problema era che il limite di memoria è stato raggiunto, come si è fermato alla linea 56 del 76. ho ri-corse 56-76 (oggi 1-20) e si è fermato alla linea 18. E 'got me perplesso ...

risposta

11

Probabilmente è necessario chiudere lo FileWriter alla fine (e svuotare per buona misura).

for(...) { 
    writer.write(row); 
} 
writer.flush(); 
writer.close(); 
+0

Questo è tutto. È il colore e vicino. Mi sento stupido ora ... –

+1

Non c'è bisogno di sentirsi stupido, è successo a molti di noi. Ora sai! – Todd

3

Forse si dovrebbe cercare di svuotare lo scrittore ?? Puoi farlo alla fine o dopo ogni scrittura - di solito lo fai alla fine.

Senza vampate di calore in modo esplicito, si basano sul runtime e sistema operativo per flsuh cose quando ci si sente come è il momento di farlo. In alternativa, i flussi ottenere arrossato quando si chiude il flusso di output che non si sta facendo nel codice di esempio o ...

provare

writer.flush(); 

e sicuramente cose vicino quando si è fatto.

Problemi correlati