CSVReader обрабатывает null как строку «null»

#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. Спасибо, это спасло мне много рефакторинга