Запись матрицы в csv файл на java

117
06 апреля 2021, 23:20

Основное задание заключается в том, что б поменять местами столбики в csv файле. Я выгрузила их оттуда в матрицу, написала цикл с заменой столбиков, который по моим наблюдениям работает. Но теперь не могу записать почему то с помощью fileWriter-a ничего. Даже через цикл пробовала делать, записывает почему то просто слупленную вместе первую строку и все. Буду благодрана за помощь.

 import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("c:");
        JFileChooser fileopen = new JFileChooser();
        int ret = fileopen.showDialog(null, "Открыть файл");
        if (ret == JFileChooser.APPROVE_OPTION) {
            file = fileopen.getSelectedFile();
            String path = file.getAbsolutePath();
        }

        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        LinkedList<String[]> rows = new LinkedList<>();
        String dataRow;
        int i = 0;
        while ((dataRow = bufferedReader.readLine()) != null) {
            rows.addLast(dataRow.split(";"));
            i++;
        }
        String[][] csvMatrix = rows.toArray(new String[rows.size()][]);
        System.out.println(csvMatrix[2][0]);
        for (int j = 0; j < csvMatrix.length; j++) {
            String temp = csvMatrix[j][0];
            String temp1 = csvMatrix[j][1];
            csvMatrix[j][0] = temp1;
            csvMatrix[j][1] = temp;
        }
FileWriter fileWriter=new FileWriter(file);
      for(int j=0; j<csvMatrix.length; j++){
          for(int k=0; k<csvMatrix.length; k++){
              fileWriter.write(csvMatrix[j][k]);
              fileWriter.flush();
          }
      }
      fileWriter.close();
    }
}
Answer 1

Вы не правильно выбираете элемент записи(см. for(int k=0; k<csvMatrix.length; k++){).

У вас массив массивов. Получается что csvMatrix[j] - это тоже массив. И перебирать тоже надо его(а не csvMatrix.length).

также к выводу надо добавить разделитель элементов(;) и перенос стоки после отработки(fileWriter.write("\n");)

Также метод "сброса буффера в файл"(fileWriter.flush();) я бы добавил после записи строки

Измените ваш блок записи на:

    FileWriter fileWriter = new FileWriter(file);
    for (int j = 0; j < csvMatrix.length; j++) {
        for (int k = 0; k < csvMatrix[j].length; k++) {
            fileWriter.write(csvMatrix[j][k]+";");
        }
        fileWriter.write("\n");
        fileWriter.flush();
    }
    fileWriter.close();

P.S: если смущает ; после последнего элемента, то измените блок записи с fileWriter.write(csvMatrix[j][k]+";"); на

    fileWriter.write(csvMatrix[j][k]);
    if (k < csvMatrix[j].length - 1) {
       fileWriter.write(";");
    }
READ ALSO
Чем отличаются методы от конструкторов в java?

Чем отличаются методы от конструкторов в java?

Чем отличаются методы от конструкторов в java? Для чего нужно то и другое?

95
Зачем нужно пробрасывать исключения?

Зачем нужно пробрасывать исключения?

Зачем нужно пробрасывать исключения? Почему может быть нельзя из сразу обработать?

105
WebView API 28 не работает

WebView API 28 не работает

Есть WebView который подгружает локальный (хранящийся в память приложения) файл indexhtml

103