java CSV文件登录数据(返回错误数据)
页面上传一个csv文件,check文件内容,如果不满足要求,则返回错误信息,反之则登录数据。(仅供参考)
1.导入依赖(opencsv.jar)
2.创建工具类
UserErrorInfo.java(存放错误信息)
1 public class UserErrorInfo { 2 /** 3 * 行番号 4 */ 5 private int rowIndex; 6 7 /** 8 * 用户ID 9 */ 10 private String userId; 11 12 /** 13 * 用户名 14 */ 15 private String userName; 16 17 /** 18 * 错误信息 19 */ 20 private List<String> errMsgs; 21 ... 22 getter() setter()... 23 }
CsvUesrRegisInfo.java(数据check)
validation check(可以自定义标签)
1 public class CsvUesrRegisInfo{ 2 /** 3 * 用户ID 4 */ 5 @NotEmpty() 6 private String userId; 7 8 /** 9 * 用户名 10 */ 11 @NotEmpty() 12 private String userName; 13 ... 14 getter() setter()... 15 }
CsvUploadOutputDto.java
1 public class CsvUploadOutputDto{ 2 /** 3 * 用户信息 4 */ 5 private List<?> dataList; 6 7 /** 8 * check结果 9 */ 10 private BindingResult bindingResult ; 11 12 /** 13 * check结果 14 */ 15 private List<UserErrorInfo> UserErrorInfoList; 16 ... 17 getter() setter()... 18 }
CsvUploadHelper.java
(核心处理)
1 public class CsvUploadHelper{ 2 public <T> CsvUploadOutputDto uploadFile(MultipartFile uploadFile, Class<T> csvBeanClass, String bindingResultObjectName){ 3 CsvUploadOutputDto outputDto = new CsvUploadOutputDto(); 4 BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(uploadFile, bindingResultObjectName); 5 // CSV非空check() 6 if (uploadFile.isEmpty()) { 7 ...// throw new BusinessException(messages); 8 } 9 List<T> dataList = new ArrayList<>(); 10 List<ObjectError> errorList = new ArrayList<>(); 11 List<UserErrorInfo > UserErrorInfos = new ArrayList<>(); 12 boolean overSizeFlag = false; 13 try { 14 //读取csv文件 15 CSVReader csvReader = new CSVReader(new InputStreamReader(uploadFile.getInputStream(),"MS932")); 16 List<String[]> csvLines = csvReader.readAll(); 17 int lineNumber = 0; 18 // 最大行数 19 if (maxRecord < csvLines.size()) { 20 overSizeFlag = true; 21 } else { 22 for (String[] line : csvLines) { 23 lineNumber = lineNumber + 1; 24 Class<?> clazz = Class.forName(csvBeanClass.getName); 25 T csvObject = (T) clazz.newInstance; 26 Field fields = csvObject.getClass.getDeclaredFields(); 27 BeanPropertyBindingResult result= new BeanPropertyBindingResult(csvObject, csvBeanClass.getName()); 28 // check 29 smartValidator.validate(csvObject, result); 30 boolean hasErrorFlag = false; 31 // 32 if (result.hasErrors){ 33 hasErrorFlag = true; 34 /** 35 * errMsgList.add(message) 36 * userErrorInfo.setErrMsgs(errMsgList); 37 * userErrorInfos.add(userErrorInfo); 38 */ 39 } 40 if (hasErrorFlag ) { 41 errorList.add(objectError) 42 } else { 43 // check通过 44 dataList.add(csvObject); 45 } 46 } 47 } 48 csvReader.close(); 49 }catch(...){ 50 ... 51 }catch(...){ 52 ... 53 } 54 outputDto.setUserErrorInfoList(userErrorInfos); 55 outputDto.setDataList(dataList); 56 for(objectError error : errorList){ 57 bindingResult.addError(error); 58 } 59 outputDto.setBindingResult (bindingResult); 60 retrun outputDto; 61 } 62 }
3.调用工具类
controller
1 outputDto = csvUploadHelper.uploadFile(uploadFile,CsvUesrRegisInfo.class,result.getObjctName()); 2 if (outputDto.getBindingResult().hasError()) { 3 //返回错误数据,返回页面 4 } else{ 5 //登录数据 6 }
总结
写这个主要目的是记录,还有很多没在这个上面写出来,但总体就是基本的csv读取和Java反射原理。