Проанализировать CSV с помощью BaneUtilBean

Я пытаюсь проанализировать CSV и сопоставить поля с классом POJO. Однако я вижу, что отображение не достигнуто правильно.

Я пытаюсь сопоставить заголовок из файла POJO в CSV.

public class CarCSVFileInputBean {
    private long Id;
    private String shortName;
    private String Name;
    private String Type;
    private String Environment;

    //getter and setters
}

Может кто-нибудь, пожалуйста, посмотрите на мой код:

public class carCSVUtil {
    private static Log log = LogFactory.getLog(carCSVUtil.class);
    private static final List<String> fileHeaderFields = new ArrayList<String>();
    private static final String UTF8CHARSET = "UTF-8";
    static {
        for (Field f : carCSVFileInputBean.class.getDeclaredFields()) {
            fileHeaderFields.add(f.getName());
        }             
    }

    public static List<carCSVFileInputBean> getCSVInputList(InputStream inputStream) {
        CSVReader reader = null;
        List<carCSVFileInputBean> csvList = null;
        carCSVFileInputBean inputRecord = null;
        String[] header = null;        
        String[] row = null;

        try {
            reader = new CSVReader(new InputStreamReader(inputStream, UTF8CHARSET));
            csvList = new ArrayList<carCSVFileInputBean>();
            header = reader.readNext();
            boolean isEmptyLine = true;
            while ((row = reader.readNext()) != null) {
                isEmptyLine = true;
                if (!(row.length == 1 && StringUtils.isBlank(row[0]))) { // not an empty line, not even containing ','
                    inputRecord = new carCSVFileInputBean();
                    isEmptyLine = populateFields(inputRecord, header, row);    

                    if (!isEmptyLine)
                        csvList.add(inputRecord);
                }
            }                       
        } catch (IOException e) {
            log.debug("IOException while accessing carCSVFileInputBean: " + e);
            return null;
        } catch (IllegalAccessException e) {
            log.debug("IllegalAccessException while accessing carCSVFileInputBean: " + e);
            return null;
        } catch (InvocationTargetException e) {
            log.debug("InvocationTargetException while copying carCSVFileInputBean properties: " + e);
            return null;
        } catch (Exception e) {
            log.debug("Exception while parsing CSV file: " + e);
            return null;
        } finally {
            try {
                if (reader != null)
                    reader.close(); 
            } catch (IOException ioe) {}
        }

        return csvList;
    }

    protected static boolean populateFields(carCSVFileInputBean inputRecord, String[] header, String[] row) throws IllegalAccessException, InvocationTargetException {
        boolean isEmptyLine = true;
        for (int i = 0; i < row.length; i++) {
            String val = row[i];

            if (!StringUtils.isBlank(val)) {
                BeanUtilsBean.getInstance().copyProperty(inputRecord, header[i], val);
                isEmptyLine = false;
            } 
        }

        return isEmptyLine;
    }
}

1 ответ

Я нашел решение - заголовки в CSV-файле, как ожидается, должны начинаться со строчной буквы.

Другие вопросы по тегам