Piszę plik csv za pomocą buforowanego programu piszącego w języku Java. Moje dane są zapisane poprawnie, ale chcę mieć różne kolumny, pod którymi znajdują się dane. Obecnie zapisuje każde wystąpienie daty w jednym wierszu, ale nie jest rozdzielone kolumnami.pisanie pliku csv przy użyciu buforowanego programu piszącego w języku Java
Kod jest
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();
Czy istnieje jakiś sposób, aby oddzielić kolumny danych mądry tak, że jest odpowiednio czytelny?
EDIT
Zamiast buforowany pisarza używam CSVReader
biblioteki dla Javy. http://www.csvreader.com/java_csv.php Kod jest teraz
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();
To właściwie formatuje dane, ale problem jest teraz gdy uruchamiam kod 2 raz 2nd plik jest tworzony i nowy plik zawiera zduplikowane wiersze, dla każdego wiersza w pierwszym plik ma 2 wiersze w drugim pliku z podobnymi danymi.
Czy to nie jest czyszczenie niektórych zasobów?
Dzięki
Kolumny powinny być oddzielone przecinkiem – tim
@tim znaczy po każdym napisać zrobić writer.write („”); – Wearybands
Możesz to zrobić - wygląda na to, że brakuje ich w nazwach kolumn i danych. Aby dokument był poprawnie sformatowany, każda kolumna powinna być oddzielona przecinkiem. Dla .csv i tak – tim