当前位置: 首页 > news >正文

SpringBoot开发——整合OpenCSV 实现数据导入导出-CSV

文章目录

  • 1、CSV 文件导出
    • 1.1 依赖配置
    • 1.2 实现 CSV 导出功能
  • 2、CSV 文件导入
    • 2.1 实现 CSV 导入功能
  • 3、CSV 文件对应的实体类
  • 总结

Spring Boot 应用中,实现 CSV 文件的导入和导出功能是非常常见的需求,特别是在数据处理、报告生成等场景中。下面详细介绍如何在 Spring Boot 中实现 CSV 文件的导入和导出。

1、CSV 文件导出

1.1 依赖配置

首先,确保在项目的 pom.xml 文件中添加了 OpenCSV 依赖:

<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>5.5.2</version>
</dependency>

1.2 实现 CSV 导出功能

接下来,我们需要编写一个控制器来处理 CSV 文件的导出请求。这个控制器会从数据库中提取数据,然后将其写入 CSV 文件中。

import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@RestController
public class CSVExportController {@Autowiredprivate DataService dataService;@GetMapping("/export/csv")public void exportCSV(HttpServletResponse response) throws IOException {String filename = "data.csv";response.setContentType("text/csv");response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"");List<Data> dataList = dataService.findAll();// 使用 OpenCSV 进行 CSV 数据写入StatefulBeanToCsv<Data> writer = new StatefulBeanToCsvBuilder<Data>(response.getWriter()).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).withSeparator(',').withOrderedResults(false).build();writer.write(dataList);}
}

在这个示例中,DataService 是一个服务类,用于从数据库中获取所有的 Data 实例StatefulBeanToCsv 类用于将 Java 对象列表写入 CSV 文件。通过 HttpServletResponse,我们将生成的 CSV 文件作为附件返回给客户端。

2、CSV 文件导入

2.1 实现 CSV 导入功能

要实现 CSV 文件的导入,我们需要编写一个 REST 控制器来处理上传的 CSV 文件并将其解析为 Java 对象

import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;@RestController
public class CSVImportController {@Autowiredprivate DataService dataService;@PostMapping("/import/csv")public String importCSV(@RequestParam("file") MultipartFile file) {try (Reader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {// 使用 OpenCSV 解析 CSV 文件CsvToBean<Data> csvToBean = new CsvToBeanBuilder<Data>(reader).withType(Data.class).withIgnoreLeadingWhiteSpace(true).build();List<Data> dataList = csvToBean.parse();// 保存数据到数据库dataService.saveAll(dataList);} catch (Exception ex) {ex.printStackTrace();return "Fail to import data: " + ex.getMessage();}return "Data successfully imported!";}
}

在这里,MultipartFile 对象代表上传的文件,CsvToBean 用于将 CSV 文件中的每一行解析为 Java 对象。解析后的数据列表将被保存到数据库中。

3、CSV 文件对应的实体类

要使用 OpenCSV 解析 CSV 文件,必须为 CSV 中的数据创建一个实体类。这个类需要用 OpenCSV 的注解标识出 CSV 文件中的每一列。

import com.opencsv.bean.CsvBindByName;public class Data {@CsvBindByName(column = "ID")private Long id;@CsvBindByName(column = "Name")private String name;// getters and setters
}

在这个示例中,@CsvBindByName 注解用于指定 CSV 文件中每一列对应的 Java 字段

总结

通过上述步骤,你可以在 Spring Boot 应用中轻松实现 CSV 文件的导入和导出功能。这些功能非常适合用于批量数据处理、数据迁移、报告生成等场景。OpenCSV 是一个强大的工具,能够帮助你简化这些任务,并确保数据的高效处理。


http://www.mrgr.cn/news/74650.html

相关文章:

  • SQL的基本CRUD操作
  • Pod控制器
  • 【鸿蒙开发】第四章 ArkTS语言UI范式-基础语法
  • WebStorm 如何调试 Vue 项目
  • HTMLCSS: 日落卡片
  • websocket服务器(协程风格)--swoole进阶篇
  • 《.addClass()》
  • 【Hive】【HiveQL】【大数据技术基础】 作业三 数据仓库Hive的使用
  • 107、Python并发编程:失败自动重试,一次搞懂简单实用的Timer
  • 网络安全开发详解与python实现
  • 69页可编辑PPT | 大数据基础知识培训课件
  • 系统架构设计师论文
  • 对于目标文件太大无法拉入u盘事件的解决方法
  • 关于我发布了第一篇vip文章这件事
  • 寻宝--Kruskal
  • 缓存雪崩问题及解决方法
  • 解决 VMware 虚拟机找不到共享文件夹
  • scp 或 ssh 报错no matching host key type found. Their offer: ssh-rsa 解决方案
  • 07Linux操作命令
  • css中linear-gradient渐变色和背景图片一起写
  • Python3.11.9+selenium,获取图片验证码以及输入验证码数字
  • ubuntu20.04安装anaconda与基本使用
  • 郑光荣参各族青少年文艺交流盛况
  • VCU--电控开发基础
  • API 进行多版本管理的方法
  • 排除被冲销的物料凭证