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.xdnf.cn/news/14802.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习(1)线性回归

前言   线性回归算法是机器学习深度学习入门的必学的算法&#xff0c;其算法原理虽然简单&#xff0c;但是却蕴含着机器学习中的一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。同时机器学习深度学习的核心思想就是优…

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改&#xff0c;代码精略的写了一下。 注&#xff1a;场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅&#xff0c;自行处理。有个方法是直接在每个外面包一个DIV&#xff0c;用动态样式设置底色。 场景一、…

Redis设计与实现 学习笔记 第十七章 集群

Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过分片&#xff08;sharding&#xff0c;水平切分&#xff09;来进行数据共享&#xff0c;并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点&#xff08;node&#xff09;组成&#xff0c;在刚开…

(11)(2.1.7) FETtec OneWire ESCs(二)

文章目录 前言 3 组态 4 可选功能 5 SITL模拟 6 故障排除 前言 &#xff01;Note 此功能在固件版本4.1.1及更高版本上可用。 3 组态 FTW掩码 SERVO_FTW_MASK 参数选择将哪些伺服输出&#xff08;如果有的话&#xff09;路由到 FETtec ESC。更改此参数后需要重新启动。…

Python Bokeh 数据可视化教程

Python Bokeh 数据可视化教程 引言 在数据科学和分析的过程中&#xff0c;数据可视化是一个至关重要的环节。它不仅能帮助我们更好地理解数据&#xff0c;还能在报告和展示中提升数据的可读性和吸引力。Python 作为数据科学的主要工具之一&#xff0c;提供了多种数据可视化库…

(免费领源码)java#SSM#mysql高校就业数据可视化管理系统的设计与实现81461-计算机毕设 原创

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对高校就业管理等问题&#xff0c;对高校就业…

wordcloud库基本介绍

文章目录 wordcloud库概述wordcloud库的安装 wordcloud库使用说明配置对象参数 wordcloud应用实例实例: 政府工作报告词云 wordcloud库概述 wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术地展示文本 wordcloud库的安装 (cmd命令行) pip install …

替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维

时序数据库 IoTDB 应用于宝武集团全基地钢铁时序数据管理&#xff0c;激活数据资产&#xff0c;赋能大型设备智能运维。 1. 背景概述 宝武装备智能科技有限公司&#xff08;以下简称&#xff1a;宝武智维&#xff09;是中国宝武设备智能运维专业化平台公司&#xff0c;30 余年始…

面试_ABtest原理简介

01 什么是ABtest ABtest来源于假设检验&#xff0c;现有两个随机均匀的有样本组A、B&#xff0c;对其中一个组A做出某种改动&#xff0c;实验结束后分析两组用户行为数据&#xff0c;通过显著性检验&#xff0c;判断这个改动对于我们所关注的核心指标是否有显著的影响&#xf…

Anolis8.2系统中搭建python环境

文章目录 安装依赖项依赖项介绍 下载python源码包安装python源码包 安装依赖项 [rootPython ~]# dnf install -y gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel uuid-devel libnsl2-d…

Gurobi学术版+Anaconda安装步骤

注意&#xff1a;在anaconda虚拟环境中安装gurobi库是不需要在本地下载gurobi这个软件的&#xff0c;只需要conda install gurobi即可&#xff0c;或者指定版本的安装conda install -c gurobi gurobi11.0.3。 step0&#xff1a;安装ananconda step1&#xff1a;获得学术许可&a…

OBOO鸥柏:旗下户外景区自助触摸查询一体机已布局智慧城市便民

OBOO鸥柏作为户外自助查询一体机制造商品牌源头工厂一体化&#xff0c;鸥柏室外液晶广告屏凭借其独特的展览展示交互式查询互动优势&#xff0c;OBOO鸥柏正逐渐成为城市公共服务与商业信息查询的商用及工业液晶显示终端机新标杆。基于智慧城市便民化布局主要体现于以下几点&…

Mysql每日一题(分组+select嵌套查询)

本题我通过自己的努力&#xff0c;利用多个知识点&#xff0c;完成了本题&#xff0c;目前还没有查看题解&#xff0c;一会会给出别人题解的方法&#xff0c;自己写的代码就很很繁琐很麻烦&#xff0c;如果是大佬&#xff0c;可能知道这一题就直接这个窗口函数加这个窗口函数就…

Java并发篇--线程池

线程池 为什么要创建线程池 因为CPU核心数量有限,如果每来一个任务就创建一个线程,就会使线程数远远多于CPU核心数,使线程上下文切换过于频繁,会导致系统性能降低。而且每创建一个线程都会占用一定的内存,如果每来一个任务就创建一个线程,内存消耗太大了。 ThreadPoolExecuto…

ubontu--cuDNN安装

1. 下载 cuDNN https://developer.nvidia.com/cudnn 2. 拷贝到服务器/home/<username>文件夹下 解压缩到当前文件夹&#xff1a; tar -xvf cudnn-linux-x86_64-9.5.1.17_cuda11-archive.tar.xz复制头文件和库文件到cuda安装目录/usr/local/cuda/ sudo cp /home/usern…

Mac终端使用brew命令报错:zsh: command not found: brew

当在终端中出现 zsh: command not found: brew 这个错误时&#xff0c;可能是因为 Homebrew 没有被正确安装&#xff0c;或者它的路径没有被添加到环境变量中。 1. 检查 Homebrew 是否已安装&#xff1a; 打开终端&#xff0c;运行以下命令来检查 Homebrew 是否已安装&#xf…

斯坦福iDP3——改进3D扩散策略以赋能人形机器人的训练:不再依赖相机校准和点云分割(含源码解析)

前言 今天10.23日&#xff0c;明天1024则将作为长沙程序员代表&#xff0c;在CSDN和长沙相关部门举办的1024程序员节开幕式上发言&#xff0c;欢迎广大开发者来长工作 生活 考察 创业&#xff0c;​包括我司七月也一直在招聘大模型与机器人开发人员 后天&#xff0c;则将和相关…

Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】

下面是项目级完整配置1➡eslint:【吐血分享,博主踩过的坑你跳过去!!跳不过去?太过分了给博主打钱】 浏览器自动打开项目: 你想释放双手吗?你想每天早上打开电脑运行完项目自动在浏览器打开吗?不要9998,不要998,只要你在我们爱的 package.json 中配置一下即可显示。如…

DataWorks on EMR StarRocks,打造标准湖仓新范式

在大数据领域&#xff0c;数据仓库和实时分析系统扮演着至关重要的角色。DataWorks 基于大数据引擎&#xff0c;为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台&#xff0c;为用户带来智能化的数据开发和分析体验。而阿里云提供的 EMR Serverless St…

谷歌浏览器的实验性功能介绍

谷歌浏览器&#xff08;Google Chrome&#xff09;作为全球最受欢迎的网络浏览器之一&#xff0c;以其快速、稳定和丰富的扩展功能而闻名。除了常见的功能外&#xff0c;Chrome还提供了许多实验性功能&#xff0c;这些功能可以通过启用一些隐藏的标志来访问。本文将详细介绍如何…