springboot导出csv文件
时间: 2023-11-08 13:57:04 浏览: 49
在Spring Boot中导出CSV文件可以使用以下步骤:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.2</version>
</dependency>
```
2. 创建CSV数据
可以使用Java集合或者数据库查询结果等数据源来创建CSV文件数据,例如:
```java
List<String[]> data = new ArrayList<>();
data.add(new String[]{"Name", "Age", "Email"});
data.add(new String[]{"John Doe", "30", "john.doe@example.com"});
data.add(new String[]{"Jane Doe", "25", "jane.doe@example.com"});
```
3. 导出CSV文件
可以使用以下代码将数据导出为CSV文件:
```java
CsvWriter csvWriter = new CsvWriter(new FileWriter("data.csv"), CsvWriter.DEFAULT_SEPARATOR, CsvWriter.NO_QUOTE_CHARACTER);
for (String[] rowData : data) {
csvWriter.writeNext(rowData);
}
csvWriter.close();
```
其中,CsvWriter是opencsv库提供的CSV写入器,接受一个Writer对象作为参数,用于将数据写入文件中。
4. 下载CSV文件
可以使用Spring Boot的ResponseEntity来将CSV文件返回给客户端下载,例如:
```java
@GetMapping("/download")
public ResponseEntity<Resource> downloadCsvFile() throws IOException {
File file = new File("data.csv");
InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=data.csv");
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
}
```
其中,InputStreamResource是Spring的Resource接口的实现,用于将文件转换为InputStream对象。将其包装在ResponseEntity中返回给客户端即可。
完整示例代码:
```java
import com.opencsv.CSVWriter;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/csv")
public class CsvController {
@GetMapping("/export")
@ResponseBody
public ResponseEntity<Resource> exportCsvFile() throws IOException {
List<String[]> data = new ArrayList<>();
data.add(new String[]{"Name", "Age", "Email"});
data.add(new String[]{"John Doe", "30", "john.doe@example.com"});
data.add(new String[]{"Jane Doe", "25", "jane.doe@example.com"});
CsvWriter csvWriter = new CsvWriter(new FileWriter("data.csv"), CsvWriter.DEFAULT_SEPARATOR, CsvWriter.NO_QUOTE_CHARACTER);
for (String[] rowData : data) {
csvWriter.writeNext(rowData);
}
csvWriter.close();
File file = new File("data.csv");
InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=data.csv");
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
}
}
```