Tôi đang viết tệp csv bằng cách sử dụng trình soạn thảo được đệm trong java. Dữ liệu của tôi được viết chính xác nhưng tôi muốn có các cột khác nhau theo đó dữ liệu đến, Hiện tại nó đang viết từng trường hợp của ngày trong một hàng nhưng không được phân cách bằng các cột.viết tệp csv bằng cách sử dụng trình soạn thảo đệm trong Java
Mã này là
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();
Có cách nào để tách các cột dữ liệu khôn ngoan để nó là đúng cách có thể đọc được?
EDIT
Thay vì sử dụng nhà văn đệm Tôi sử dụng CSVReader
thư viện cho java. http://www.csvreader.com/java_csv.php Mã bây giờ là
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();
Nó đúng định dạng dữ liệu nhưng vấn đề bây giờ là khi tôi chạy mã cho lần thứ 2 một tập tin thứ 2 được tạo ra và các file mới chứa hàng trùng lặp, cho mỗi hàng trong lần đầu tiên tệp có 2 hàng trong tệp thứ 2 có dữ liệu tương tự.
Đó có phải là tôi không làm sạch một số tài nguyên không?
Cảm ơn
Cột phải được phân tách bằng dấu phẩy – tim
@tim nghĩa là sau mỗi lần viết, tôi nên viết writer.write (","); – Wearybands
Bạn có thể làm điều đó - có vẻ như chúng bị thiếu trong tên cột và trong dữ liệu. Để tài liệu định dạng chính xác, mỗi cột phải được phân tách bằng dấu phẩy. Đối với một .csv anyway – tim