Как по-другому считывать данные из csv-файла для дальнейшей сериализации в json?
Имеется программа, которая построчно считывает строки из csv-файла, распарсивает их по разделителю, а получившееся сохраняет в коллекцию типа List. Это хорошо работает для одномерного содержимого ячеек csv-файла. Как сделать, чтобы без проблем считывались даже массивы из ячеек? Вот код:
package study;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class Plug {
public static void main(String[] args) throws IOException {
System.out.print("Введите Id интересующего клиента: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String selectID = reader.readLine();
String filePath = "D:\\Temp\\users.csv";
List<User> users = ParseUserCsv(filePath);
String sql;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).id.equals(selectID)) {
Gson gson = new Gson();
System.out.println(gson.toJson(users.get(i)));
sql = "INSERT INTO [testBase].[dbo].[uData] (id,firstName,lastName,patronymic,cardNumber) VALUES (" + users.get(i).id + ",'" + users.get(i).firstName + "','" + users.get(i).lastName + "','" + users.get(i).patronymic + "','" + users.get(i).cardNumber + "')";
System.out.println(sql);
}
}
}
private static List<User> ParseUserCsv(String filePath) throws IOException {
List<User> users = new ArrayList<>();
List<String> fileLines = Files.readAllLines(Paths.get(filePath));
for (String fileLine : fileLines) {
String[] tempText = fileLine.split(";");
ArrayList<String> columnList = new ArrayList<>();
for (int i = 0; i < tempText.length; i++) {
if (IsColumnPart(tempText[i])) {
String lastText = columnList.get(columnList.size() - 1);
columnList.set(columnList.size() - 1, lastText + ","+ tempText[i]);
} else {
columnList.add(tempText[i]);
}
}
//System.out.println(columnList.get(0) + " " + columnList.get(1) + " " + columnList.get(2) + " " + columnList.get(3) + " " + columnList.get(4));
User user = new User();
user.id = columnList.get(0);
user.firstName = columnList.get(1);
user.lastName = columnList.get(2);
user.patronymic = columnList.get(3);
user.cardNumber = columnList.get(4);
users.add(user);
}
return users;
}
private static boolean IsColumnPart(String text) {
String trimText = text.trim();
return trimText.indexOf("\"") == trimText.lastIndexOf("\"") && trimText.endsWith("\"");
}
}