Как мне выполнить запись в CSV-файл с несколькими запятыми?

#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. Нет, более эффективно использовать print только: writer.print(each.MAX); writer.print(", "); writer.print(each.MIN); ... . Это позволяет избежать ненужных строковых объектов и хранения всех данных файла в памяти.

3. Кроме того, использование внутри append — это плохой стиль, потому что он создает StringBuilder внутри.

4. вы уверены, что каждый раз, когда используется print (он будет записывать в файл), это более эффективно. вместо того, чтобы печатать значение каждого столбца, я могу печатать по крайней мере одну строку за раз

5. Вы также можете избавиться от бизнеса lineSep, используя его println .