Парсинг CSV на java
Я пытаюсь научиться языку джава с полного нуля, до этого с кодом не сталкивался вообще. на курсе выполняю задание по работе с CSV. Вроде почти сделал, но никак не могу определиться с параметром метода для parce CSV, что в него передать?? Заранее спасибо. Если будут замечания по коду буду рад исправить. Прошу прощения за отнятое время.
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.opencsv.CSVReader;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Main {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
String[] columnMapping = {"id", "firstName", "lastName", "country", "age"};
String fileName = "data.xml";
List<Employee> list = parseXML(new String[]{"data.xml"});
String json = listToJson(list);
List<Employee> listCsv = parseCSV(new String[]{"data.csv"});
String jsonCSV = listToJson(listCsv);
writeString(json);
}
private static List<Employee> parseCSV(String[] columnMapping) {
List<Employee> staff = null;
try (CSVReader csvReader = new CSVReader(new FileReader("data.csv"))) {
ColumnPositionMappingStrategy<Employee> strategy =
new ColumnPositionMappingStrategy<>();
strategy.setType(Employee.class);
strategy.setColumnMapping("id", "firstName", "lastName", "country", "age");
CsvToBean<Employee> csv = new CsvToBeanBuilder<Employee>(csvReader)
.withMappingStrategy(strategy)
.build();
staff = csv.parse();
staff.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
return staff;
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Чтобы спарсить CSV, не нужно столько кода, все на много проще:
import com.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
List<Employee> listCsv = parseCSV(Employee.class, "data.csv");
listCsv.forEach(System.out::println);
}
private static <T> List<T> parseCSV(Class<T> modelClass, String fileName) throws IOException {
return new CsvToBeanBuilder<T>(new FileReader(fileName))
.withType(modelClass)
.withSeparator(';')
.build().parse();
}
}
import com.opencsv.bean.CsvBindByName;
@lombok.Data
public class Employee {
@CsvBindByName(column = "id")
private String id;
@CsvBindByName(column = "firstName")
private String firstName;
@CsvBindByName(column = "lastName")
private String lastName;
@CsvBindByName(column = "country")
private String country;
@CsvBindByName(column = "age")
private String age;
}