#java #csv
#java #csv
Вопрос:
Это мой код для файла записи:
public void CreateCSV(PerfomanceBST[] temp) throws IOException {
try (PrintWriter writer = new PrintWriter("InstrumentationCSV.csv", "UTF-8")) {
String out = "";
String lineSep = System.getProperty("line.separator");
for (PerfomanceBST each : temp) {
out = each.MAX "; " each.MIN "; " each.getAverage() "rn";
//writer.write(out "rn");
}
writer.print(out);
}
}
он выводит 3 значения в один столбец.
Комментарии:
1. CSV, разделенный точкой с запятой, а не запятыми?
;
это не то же самое, что,
2. На что вы надеетесь, что происходит и почему это проблема?
3. Я имею в виду, что существуют десятки различных форматов CSV. Сначала вам нужно определить, какой формат ожидается любым инструментом, который будет его считывать.
Ответ №1:
Используйте приведенный ниже код, он создаст CSV-файл, разделенный запятыми
public static void CreateCSV(){
try (PrintWriter writer = new PrintWriter("/tmp/InstrumentationCSV.csv", "UTF-8")) {
StringBuilder out = new StringBuilder();
String lineSep = System.getProperty("line.separator");
for (PerfomanceBST each : temp) {
out.append(each.MAX ", " each.MIN ", " each.getAverage() "rn");
}
writer.print(out.toString());
} catch (Exception e) {
}
}
Комментарии:
1. Зачем использовать StringBuffer, когда вы можете использовать print напрямую?
2. Нет, более эффективно использовать
writer.print(each.MAX); writer.print(", "); writer.print(each.MIN); ...
. Это позволяет избежать ненужных строковых объектов и хранения всех данных файла в памяти.3. Кроме того, использование
внутри
append
— это плохой стиль, потому что он создает StringBuilder внутри.4. вы уверены, что каждый раз, когда используется print (он будет записывать в файл), это более эффективно. вместо того, чтобы печатать значение каждого столбца, я могу печатать по крайней мере одну строку за раз
5. Вы также можете избавиться от бизнеса lineSep, используя его
println
.