OpenCSV地址:http://opencsv.sourceforge.net/
使用示例(kotlin)
/**
* 导入excel并解析返回数据
*/
override fun import(file: MultipartFile, sendType: String): ImportExcelDataVO? {
try {
var result: List<CoinSendTo>? = null
if (SEND_TYPE_ADDRESS.toUpperCase() == sendType.toUpperCase()) {
result = (CsvUtils.parse(file.inputStream, WiccAddressSendTO::class.java) as List<WiccAddressSendTO>).
filter { it.amount != null}.filter { !StringUtils.isEmpty(it.address) }
}
if (SEND_TYPE_MOBILE.toUpperCase() == sendType.toUpperCase()) {
result = (CsvUtils.parse(file.inputStream, WiccMobilSendTO::class.java) as List<WiccMobilSendTO>).
filter { it.amount != null }.filter { !StringUtils.isEmpty(it.mobile) }
}
val sequence = UUIDUtils.UUIDNoConnector().toString()
valueCacheRedisRepository.put(sequence, JSON.toJSONString(result), 10, TimeUnit.MINUTES)
return ImportExcelDataVO(sequence, result)
} catch (e: Exception) {
throw BizException(ErrorCode.PARSE_CSV_DATA_ERROR)
}
}
public class CsvUtils {
public static <T> List<T> parse(InputStream inputStream, Class<? extends T> clazz) {
// no bean clazz for assemble
if (null == clazz) {
throw new BizException(ErrorCode.NO_PARSER_BEAN_SUPPLIED);
}
// no inputstream for read
if (null == inputStream) {
throw new BizException(ErrorCode.EMPTY_DATA_FOR_IMPORT);
}
Reader reader = new InputStreamReader(inputStream, Charset.forName("utf-8"));
return new CsvToBeanBuilder<T>(reader).withType(clazz).build().parse();
}
public static void main(String[] args) {
File file = new File("./FL_insurance_sample.csv");
InputStream is = null;
try {
is = new FileInputStream(file);
List<TestBean> result = CsvUtils.parse(is, TestBean.class);
if (null != result) {
for (TestBean testBean : result) {
System.out.println(testBean);
System.out.println("------------------------------------------------");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}