Java使用opencsv完成对csv批量操作

2024-02-13 17:20

本文主要是介绍Java使用opencsv完成对csv批量操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、maven
  • 二、造数
  • 三、代码部分
    • 1.OpenCsvController
    • 2.OpenCsvUtil
    • 3.StudentInfo
    • 4.CodeToValue
  • 三、效果展示
    • 1.download
    • 2.upload
  • 总结


前言

csv文件是不同于excel文件的另一种文件,常常以,作为分隔符,本篇将通过JavaBean的形式完成对csv文件的读取和写出等,包含了对日期类型和码值类型数据的处理替换,真正做到稍微修改即可用。


一、maven

<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv --><dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>5.7.1</version></dependency>

二、造数

数据的话我数据库里有了,这个步骤我就跳过了
在这里插入图片描述

三、代码部分

1.OpenCsvController

@RestController
@RequestMapping("opencsv")
public class OpenCsvController {@Autowiredprivate StudentInfoService studentInfoService;@GetMapping("/download")public void download(HttpServletResponse response) throws IOException {//List<List<Map<String, Object>>> testsp = testService.testsp();// 响应正文response.reset();response.setContentType("application/octet-stream");// 这里URLEncoder.encode可以防止中文乱码response.setHeader("Content-disposition", "attachment;filename=t_student_info.csv");StudentInfoExample studentInfoExample = new StudentInfoExample();studentInfoExample.setOrderByClause("CAST(id AS SIGNED)");List<StudentInfo> studentInfos = studentInfoService.selectByExample(studentInfoExample);OpenCsvUtil.beanToCsv(new OutputStreamWriter(response.getOutputStream(),"GBK"),studentInfos);}@RequestMapping("/upload")public void upload(MultipartFile file) throws IOException {OpenCsvUtil.csvToBean(file);}
}

2.OpenCsvUtil

public class OpenCsvUtil {public static void beanToCsv(Writer writer, List list) {CSVWriter csvWriter = null;try {csvWriter = new CSVWriter(writer,CSVWriter.DEFAULT_SEPARATOR,CSVWriter.NO_QUOTE_CHARACTER,CSVWriter.NO_ESCAPE_CHARACTER,CSVWriter.DEFAULT_LINE_END);// 映射策略/*有序的,自己组织头*/
//            String []header=new String[] {"学号","姓名","年龄","出生日期","民族","证件类型","证件号码","手机号","入学时间","家庭住址","院系","专业","班级","辅导员","是否在籍"};
//            String []mapping=new String[] {"id","name","age","birthday","nation","idType","idNumber","tel","admissionTime","address","faculty","major","classID","instructor","registered"};
//            mappingStrategy.setColumnMapping(mapping);
//            csvWriter.writeNext(header);
//            ColumnPositionMappingStrategy <StudentInfo> mappingStrategy = new ColumnPositionMappingStrategy();/*无序的,头从注解中获取*/HeaderColumnNameMappingStrategy<StudentInfo> mappingStrategy = new HeaderColumnNameMappingStrategy();mappingStrategy.setType(StudentInfo.class);mappingStrategy.generateHeader((StudentInfo)list.get(0));StatefulBeanToCsv<StudentInfo> statefulBeanToCsv = new StatefulBeanToCsvBuilder<StudentInfo>(csvWriter).withMappingStrategy(mappingStrategy).build();statefulBeanToCsv.write(list);} catch (CsvRequiredFieldEmptyException e) {throw new RuntimeException(e);} catch (CsvDataTypeMismatchException e) {throw new RuntimeException(e);} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}public static void csvToBean(MultipartFile file) {CSVReader reader = null;try {reader = new CSVReader(new InputStreamReader(file.getInputStream(), "GBK"));HeaderColumnNameMappingStrategy<StudentInfo> mappingStrategy = new HeaderColumnNameMappingStrategy();mappingStrategy.setType(StudentInfo.class);CsvToBean<StudentInfo> build = new CsvToBeanBuilder<StudentInfo>(reader).withType(StudentInfo.class).build();build.setMappingStrategy(mappingStrategy);List<StudentInfo> beans = build.parse();beans.forEach(System.out::println);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (reader != null) {reader.close();}} catch (IOException e) {e.printStackTrace();}}}
}

3.StudentInfo

public class StudentInfo implements Serializable {private static final long serialVersionUID = 1L;/** 学号 **/@ApiModelProperty(value = "学号")@CsvBindByName(column="学号")@CsvBindByPosition(position = 0)private String id;/** 姓名 **/@ApiModelProperty(value = "姓名")@CsvBindByName(column="姓名")@CsvBindByPosition(position = 1)private String name;/** 年龄 **/@ApiModelProperty(value = "年龄")@CsvBindByName(column="年龄")@CsvBindByPosition(position = 2)private Integer age;/** 出生日期 **/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")@ApiModelProperty(value = "出生日期")@CsvBindByName(column="出生日期")@CsvDate("yyyy年MM月dd日")private Date birthday;/** 民族 **/@ApiModelProperty(value = "民族")@CsvBindByName(column="民族")private String nation;/** 证件类型 **/@ApiModelProperty(value = "证件类型")@CsvBindByName(column="证件类型")private String idType;/** 证件号码 **/@ApiModelProperty(value = "证件号码")@CsvBindByName(column="证件号码")private String idNumber;/** 手机号 **/@ApiModelProperty(value = "手机号")@CsvBindByName(column="手机号")private Integer tel;/** 入学时间 **/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")@ApiModelProperty(value = "入学时间")@CsvDate("yyyy年MM月dd日 HH:mm:ss")@CsvBindByName(column="入学时间")private Date admissionTime;/** 家庭住址 **/@ApiModelProperty(value = "家庭住址")@CsvBindByName(column="家庭住址")private String address;/** 院系 **/@ApiModelProperty(value = "院系")@CsvBindByName(column="院系")private String faculty;/** 专业 **/@ApiModelProperty(value = "专业")@CsvBindByName(column="专业")private String major;/** 班级 **/@ApiModelProperty(value = "班级")@CsvBindByName(column="班级")private Integer classID;/** 辅导员 **/@ApiModelProperty(value = "辅导员")@CsvBindByName(column="辅导员")private String instructor;/** 是否在籍(0:否;1:是) **/@ApiModelProperty(value = "是否在籍(0:否;1:是)")@CsvCustomBindByName(column="是否在籍",converter = CodeToValue.class)private Character registered;/** 分数信息**/@ApiModelProperty(value = "分数信息StudentScore")private ArrayList<StudentScore> studentScore;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getNation() {return nation;}public void setNation(String nation) {this.nation = nation;}public String getIdType() {return idType;}public void setIdType(String idType) {this.idType = idType;}public String getIdNumber() {return idNumber;}public void setIdNumber(String idNumber) {this.idNumber = idNumber;}public Integer getTel() {return tel;}public void setTel(Integer tel) {this.tel = tel;}public Date getAdmissionTime() {return admissionTime;}public void setAdmissionTime(Date admissionTime) {this.admissionTime = admissionTime;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getFaculty() {return faculty;}public void setFaculty(String faculty) {this.faculty = faculty;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public Integer getClassID() {return classID;}public void setClassID(Integer classID) {this.classID = classID;}public String getInstructor() {return instructor;}public void setInstructor(String instructor) {this.instructor = instructor;}public Character getRegistered() {return registered;}public void setRegistered(Character registered) {this.registered = registered;}public ArrayList<StudentScore> getStudentScore() {return studentScore;}public void setStudentScore(ArrayList<StudentScore> studentScore) {this.studentScore = studentScore;}public StudentInfo() {super();}public StudentInfo(String id, String name, Integer age, Date birthday, String nation, String idType, String idNumber, Integer tel, Date admissionTime, String address, String faculty, String major, Integer classID, String instructor, Character registered) {this.id = id;this.name = name;this.age = age;this.birthday = birthday;this.nation = nation;this.idType = idType;this.idNumber = idNumber;this.tel = tel;this.admissionTime = admissionTime;this.address = address;this.faculty = faculty;this.major = major;this.classID = classID;this.instructor = instructor;this.registered = registered;}@Overridepublic String toString() {return "StudentInfo{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", birthday=" + birthday +", nation='" + nation + '\'' +", idType='" + idType + '\'' +", idNumber='" + idNumber + '\'' +", tel=" + tel +", admissionTime=" + admissionTime +", address='" + address + '\'' +", faculty='" + faculty + '\'' +", major='" + major + '\'' +", classID=" + classID +", instructor='" + instructor + '\'' +", registered=" + registered +", studentScore=" + studentScore +'}';}
}

4.CodeToValue

public class CodeToValue extends AbstractBeanField {@Overrideprotected Object convert(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException {if(s.equals("否")){return  '0';}if(s.equals("是")){return  '1';}return null;}@Overridepublic String convertToWrite(Object value) {if(String.valueOf(value).equals("0")){return  "否";}if(String.valueOf(value).equals("1")){return  "是";}return null;}
}

三、效果展示

1.download

在这里插入图片描述

2.upload

在这里插入图片描述


总结

回到顶部
官方网站
快速入门
操作excel点这里

这篇关于Java使用opencsv完成对csv批量操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706139

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

pandas DataFrame keys的使用小结

《pandasDataFramekeys的使用小结》pandas.DataFrame.keys()方法返回DataFrame的列名,类似于字典的键,本文主要介绍了pandasDataFrameke... 目录Pandas2.2 DataFrameIndexing, iterationpandas.DataF

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1