#java #opencsv
#java #opencsv
Вопрос:
У меня есть входной csv, как показано ниже
firstName,lastName
abdu,null
shah,kha
Я использую opencsv, и мой код выглядит так
File inputFile = new File("input.csv");
CsvSchema schema = CsvSchema.emptySchema().withHeader();
MappingIterator<Map<String, String>> mappingIterator =
new CsvMapper().readerFor(Map.class).with(schema).readValues(inputFile);
Первый итератор сопоставления приводит к отображению с FirstName и LastName в качестве ключей.
Фамилия имеет значение как "null"
(строка в кавычках).
Есть ли способ, с помощью которого я мог бы прочитать его как null
(без кавычек)??
Комментарии:
1. CsvSchema не из opencsv, а из jackson.
Ответ №1:
в OpenCSV вы можете реализовать свой собственный CSVParser следующим образом:
public static void main(String[] args) throws Exception {
String csv = "firstName,lastNamen"
"abdu,nulln"
"shah,kha";
CSVReader reader = new MyCSVReader(csv);
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
for (String s : nextLine) {
System.out.print(s == null ? "NULL" : s);
}
System.out.println();
}
}
private static class MyCSVReader extends CSVReader {
public MyCSVReader(String csv) {
super(new StringReader(csv));
parser = new CSVParser() {
@Override
protected String[] parseLine(String nextLine, boolean multi) throws IOException {
String[] result = super.parseLine(nextLine, multi);
for (int i = 0; i < result.length; i) {
if ("null".equals(result[i])) result[i] = null;
}
return resu<
}
};
}
}
Комментарии:
1. Спасибо, это спасло мне много рефакторинга