2015-01-22 17 views
5

Dieser hat mich verrückt gemacht. Ich habe den folgenden Code, der eine CSV-Datei und neu formatiert sie in eine Kopie bereit Format Java-Array einfügen lautet:Schreiben von Java-Dateien wird nach dem Zufallsprinzip beendet?

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"); 
} 

Wie Sie sehen können, ist der Code druckt die Datensätze in der Datei zu trösten, sowie in die Datei für meine Kopie einfügen. Der Code funktioniert, keine Fehler usw. Die erstellte Datei stoppt jedoch zufällig in der Mitte der Datensätze. Ich bin durch den Code gegangen und die Schreibaufrufe funktionieren, und der seltsamste Teil ist, dass die Konsole alle Datensätze in Ordnung druckt, die die erstellte Datei spiegeln sollen. Gibt es jemanden, der erklären kann, warum die Datei nicht fertig ist, aber die Konsole ist?

Weitere Informationen. Die anfängliche Datei bestand aus 76 Zeilen von ungefähr 36 KB. Ich dachte, das Problem war, dass das Speicherlimit erreicht wurde, als es bei Zeile 56 von 76 anhielt. Ich ran 56-76 (jetzt 1-20) und es hörte bei Zeile 18. Es hat mich ratlos ...

Antwort

11

Sie müssen wahrscheinlich die FileWriter am Ende schließen (und bündig für ein gutes Maß).

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

Das ist es. Es ist der Flush und schließen. Ich fühle mich jetzt dumm ... –

+1

Keine Notwendigkeit, sich dumm zu fühlen, es ist vielen von uns passiert. Jetzt wissen Sie! – Todd

3

Vielleicht sollten Sie versuchen, den Brenner zu spülen ?? Sie können es am Ende oder nach jedem Schreiben tun - normalerweise tun Sie es am Ende.

Ohne explizit zu löschen, verlassen Sie sich auf die Laufzeit und OS zu flsuh Dinge, wenn es wie es an der Zeit ist, es zu tun ist. Alternativ Ströme gespült bekommen, wenn Sie die Ausgabe-Stream zu schließen, die Sie nicht entweder in dem Beispielcode zu tun ...

versuchen

writer.flush(); 

Und auf jeden Fall schließen Dinge, wenn Sie fertig sind.

Verwandte Themen