解决csv文件读取时第一列无法读取到的问题

解决csv文件读取时第一列无法读取到的问题

在使用opencsv做csv文件导出与导入的时候,由于导入的csv文件带有bom标识,导致老是文件的第一列无法读取,下面贴出解决方法:

症状:
  • 使用opencsv进行文件读取时,无法读取到第一列的内容
原因:
  • csv文件带有bom头
解决方法:
  • 方法一:notepad++打开csv文件,在“编码”处选择“使用utf-8编码”,然后导入
  • 方法二:在java后台去掉文件数据流中的bom头,去除方法如下:
/**
     * 读取流中前面的字符,看是否有bom,如果有bom,将bom头先读掉丢弃
     *
     * @param in
     * @return
     * @throws IOException
     */
    public static InputStream getInputStream(InputStream in) throws IOException {

        PushbackInputStream testin = new PushbackInputStream(in);
        int ch = testin.read();
        if (ch != 0xEF) {
            testin.unread(ch);
        } else if ((ch = testin.read()) != 0xBB) {
            testin.unread(ch);
            testin.unread(0xef);
        } else if ((ch = testin.read()) != 0xBF) {
            throw new IOException("错误的UTF-8格式文件");
        } else {
        }
        return testin;
    }

然后进行读取csv文件的代码:

    // 此处的file为multipartfile格式
    try {
            InputStream inputStream = getInputStream(file.getInputStream());
            InputStreamReader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

            HeaderColumnNameMappingStrategy strategy = new HeaderColumnNameMappingStrategy();
            strategy.setType(TestDTO.class);
            if(null != reader) {
                CsvToBean csvToBean = new CsvToBeanBuilder(reader).withMappingStrategy(strategy).build();
                List testDTOLists = csvToBean.parse();
                for(int i=0;i"testDTOList======"+testDTOLists);
                }
                reader.close();
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

你可能感兴趣的:(java开发)