Java POI导出CSV文件
简介
CSV(Comma Separated Values)文件是一种常见的数据存储格式,它以纯文本形式存储表格数据,每行表示一条记录,每个字段之间使用逗号分隔。在Java中,我们可以使用Apache POI库来导出CSV文件。Apache POI是一个用于处理Microsoft Office文件的开源Java库,它提供了一组API用于创建、读取和修改Excel、Word和PowerPoint文件。
本文将介绍如何使用Java POI库导出CSV文件,包括创建Workbook、Sheet、Row和Cell对象,设置单元格的值和样式,以及将数据写入CSV文件。
准备工作
首先,我们需要在项目中引入Apache POI的依赖。在Maven项目中,可以在pom.xml
文件中添加以下依赖项:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
创建CSV文件
首先,我们需要创建一个CSV文件。在Excel中,一个文件可以包含多个Sheet,每个Sheet可以包含多行多列的数据。在Java中,我们可以使用Workbook
、Sheet
、Row
和Cell
对象来表示这些概念。
下面是创建CSV文件的代码示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class CsvExporter {
public static void main(String[] args) {
// 创建Workbook对象
Workbook workbook = new XSSFWorkbook();
// 创建Sheet对象
Sheet sheet = workbook.createSheet("Sheet1");
// 创建第一行
Row headerRow = sheet.createRow(0);
// 设置列名
Cell headerCell1 = headerRow.createCell(0);
headerCell1.setCellValue("姓名");
Cell headerCell2 = headerRow.createCell(1);
headerCell2.setCellValue("年龄");
// 创建数据行
Row dataRow = sheet.createRow(1);
// 设置数据
Cell dataCell1 = dataRow.createCell(0);
dataCell1.setCellValue("张三");
Cell dataCell2 = dataRow.createCell(1);
dataCell2.setCellValue(20);
// 将Workbook写入文件
try (FileOutputStream fileOut = new FileOutputStream("data.csv")) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
// 关闭Workbook对象
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们首先创建一个Workbook
对象,这可以是HSSFWorkbook
(对应于xls格式)或XSSFWorkbook
(对应于xlsx格式)。然后,我们创建一个Sheet对象,命名为"Sheet1"。接下来,我们创建第一行,并设置列名。然后,我们创建数据行,并设置数据。最后,我们将Workbook对象写入到名为"data.csv"的文件中,并关闭Workbook对象。
读取数据生成CSV文件
除了手动设置单元格的值,我们还可以从数据源(如数据库、Excel文件等)中读取数据,并将其生成为CSV文件。
下面是从数据库读取数据并生成CSV文件的代码示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;
public class CsvExporter {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
// 创建Workbook对象
Workbook workbook = new XSSFWorkbook();
// 创建Sheet对象
Sheet sheet = workbook.createSheet("Sheet1");
// 创建第一行
Row headerRow = sheet.createRow(0);
// 设置列名
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
Cell headerCell = headerRow.createCell(i - 1);
headerCell.setCellValue(metaData.getColumnName(i));
}
// 创建数据行
int rowNum = 1;
while (rs.next()) {
Row