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
是一个强大的工具,能够帮助你简化这些任务,并确保数据的高效处理。