java CSV文件登录数据(返回错误数据)

页面上传一个csv文件,check文件内容,如果不满足要求,则返回错误信息,反之则登录数据。(仅供参考)


1.导入依赖(opencsv.jar)
2.创建工具类

UserErrorInfo.java(存放错误信息)

public class UserErrorInfo {
	/**
     * 行番号
     */
     private int rowIndex;
     
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 用户名
     */
    private String userName;
    
    /**
     * 错误信息
     */
    private List<String> errMsgs;
    ...
    getter() setter()...
}

CsvUesrRegisInfo.java(数据check)
validation check(可以自定义标签)

public class CsvUesrRegisInfo{
    /**
     * 用户ID
     */
     @NotEmpty()
    private String userId;
    
    /**
     * 用户名
     */
     @NotEmpty()
    private String userName;
    ...
    getter() setter()...
}

CsvUploadOutputDto.java

public class CsvUploadOutputDto{
    /**
     * 用户信息
     */
    private List<?> dataList;
    
    /**
     * check结果
     */
    private BindingResult bindingResult ;
    
    /**
     * check结果
     */
    private List<UserErrorInfo> UserErrorInfoList;
    ...
    getter() setter()...
}

CsvUploadHelper.java
(核心处理)

public class CsvUploadHelper{
    public <T> CsvUploadOutputDto uploadFile(MultipartFile uploadFile, Class<T> csvBeanClass, String bindingResultObjectName){
		CsvUploadOutputDto outputDto = new CsvUploadOutputDto();
		BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(uploadFile, bindingResultObjectName);
		// CSV非空check()
		if (uploadFile.isEmpty()) {
			...// throw new BusinessException(messages);
		}
		List<T> dataList = new ArrayList<>();
		List<ObjectError> errorList = new ArrayList<>();
		List<UserErrorInfo > UserErrorInfos = new ArrayList<>();
		boolean overSizeFlag = false;
		try {
			//读取csv文件
			CSVReader csvReader = new CSVReader(new InputStreamReader(uploadFile.getInputStream(),"MS932"));
			List<String[]> csvLines = csvReader.readAll();
			int lineNumber = 0;
			// 最大行数
			if (maxRecord < csvLines.size()) {
				overSizeFlag = true;
			} else {
				for (String[] line : csvLines) {
					lineNumber = lineNumber + 1;
					Class<?> clazz = Class.forName(csvBeanClass.getName);
					T csvObject = (T) clazz.newInstance;
					Field fields = csvObject.getClass.getDeclaredFields();
					BeanPropertyBindingResult result= new BeanPropertyBindingResult(csvObject, csvBeanClass.getName());
					// check
					smartValidator.validate(csvObject, result);
					boolean hasErrorFlag = false;
					//
					if (result.hasErrors){
						hasErrorFlag = true;
						/**
     					 * errMsgList.add(message)
     					 * userErrorInfo.setErrMsgs(errMsgList);
     					 * userErrorInfos.add(userErrorInfo);
    					 */
					}
					if (hasErrorFlag ) {
						errorList.add(objectError)
					} else {
						// check通过
						dataList.add(csvObject);
					}
				}
			}
			csvReader.close();
		}catch(...){
			...
		}catch(...){
			...
		}
		outputDto.setUserErrorInfoList(userErrorInfos);
		outputDto.setDataList(dataList);
		for(objectError error : errorList){
			bindingResult.addError(error);
		}
		outputDto.setBindingResult (bindingResult);
		retrun outputDto;
	}
}

3.调用工具类
controller

outputDto = csvUploadHelper.uploadFile(uploadFile,CsvUesrRegisInfo.class,result.getObjctName());
if (outputDto.getBindingResult().hasError()) {
	//返回错误数据,返回页面
} else{
	//登录数据
}

总结

写这个主要目的是记录,还有很多没在这个上面写出来,但总体就是基本的csv读取和Java反射原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.猫的树

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值