Основное задание заключается в том, что б поменять местами столбики в 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();
}
}
Вы не правильно выбираете элемент записи(см. 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(";");
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Чем отличаются методы от конструкторов в java? Для чего нужно то и другое?
Очень странные вещи происходят
Зачем нужно пробрасывать исключения? Почему может быть нельзя из сразу обработать?
Есть WebView который подгружает локальный (хранящийся в память приложения) файл indexhtml