Ich schreibe eine CSV-Datei mit gepufferten Writer in Java. Meine Daten sind korrekt geschrieben, aber ich möchte verschiedene Spalten haben, unter denen die Daten kommen. Momentan schreibt sie jede Instanz von Datum in eine Zeile, aber nicht durch Spalten getrennt.Schreiben einer CSV-Datei mit Buffered Writer in Java
Der Code ist
DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");
File file = new File(dirName + "\\"+ df.format(new Date()) +"_Statistics.csv");
if (!file.exists())
file.createNewFile();
FileWriter fw = new FileWriter(file);
writer = new BufferedWriter(fw);
writer.write("Message Source");
writer.write("Message Name");
writer.write("Component");
writer.write("Occurance");
writer.write("Message Payload");
writer.write("Bandwidth (Payload)");
writer.write("Message Payload with Header");
writer.write("Bandwidth (Payload with Header)");
writer.newLine();
for (Signal signal : messages) {
writer.write(signal.getSource());
writer.write(signal.getName());
writer.write(signal.getComponent());
writer.write(Integer.toString(signal.getOccurance()));
writer.write(Integer.toString(signal.getSize()));
writer.write(Float.toString(signal.getBandwidth()));
writer.write(Integer.toString(signal.getSizewithHeader()));
writer.write(Float.toString(signal.getBandwidthWithHeader()));
writer.newLine();
}
writer.flush();
writer.close();
fw.close();
Gibt es eine Möglichkeit, die Daten spaltenweise zu trennen, so dass es richtig lesbar ist?
EDIT
Statt gepufferte Writer ich CSVReader
Bibliothek für Java. jetzt http://www.csvreader.com/java_csv.php Der Code ist
DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");
File file = new File(dirName + "\\"+ df.format(new Date()) +"_Statistics.csv");
if (!file.exists())
file.createNewFile();
// Use FileWriter constructor that specifies open for appending
CsvWriter csvOutput = new CsvWriter(new FileWriter(file, true), ',');
//Create Header for CSV
csvOutput.write("Message Source");
csvOutput.write("Message Name");
csvOutput.write("Component");
csvOutput.write("Occurance");
csvOutput.write("Message Payload");
csvOutput.write("Bandwidth (Payload)");
csvOutput.write("Message Payload with Header");
csvOutput.write("Bandwidth (Payload with Header)");
csvOutput.endRecord();
for (Signal signal : messages) {
csvOutput.write(signal.getSource());
csvOutput.write(signal.getName());
csvOutput.write(signal.getComponent());
csvOutput.write(Integer.toString(signal.getOccurance()));
csvOutput.write(Integer.toString(signal.getSize()));
csvOutput.write(Float.toString(signal.getBandwidth()));
csvOutput.write(Integer.toString(signal.getSizewithHeader()));
csvOutput.write(Float.toString(signal.getBandwidthWithHeader()));
csvOutput.endRecord();
}
csvOutput.flush();
csvOutput.close();
Es richtig die Daten formatiert, aber das Problem ist jetzt, wenn ich den Code für die 2. Mal, wenn eine zweite Datei ausgeführt wird erstellt und die neue Datei enthält duplizierte Zeilen, für jede Zeile in dem ersten Datei gibt es 2 Zeilen in der 2. Datei mit ähnlichen Daten.
Ist das nicht einige Ressourcen zu reinigen?
Dank
Säulen sollten durch ein Komma getrennt werden – tim
@ Tim Sie bedeuten nach jedem schreibe ich sollte writer.write tun („“); – Wearybands
Sie könnten das tun - es scheint, dass sie in den Spaltennamen und in den Daten fehlen. Damit das Dokument korrekt formatiert wird, sollte jede Spalte durch ein Komma getrennt sein. Für eine .csv trotzdem – tim