Java将多个CSV文件合并成一个Excel文件
概述
在实际开发中,我们经常会遇到将多个CSV(Comma-Separated Values,逗号分隔值)文件合并成一个Excel文件的需求。本文将介绍如何使用Java编程语言实现这一功能。
CSV文件格式
CSV文件是一种常见的以文本形式存储表格数据的文件格式,每行代表一条记录,每列代表一个字段。字段之间使用逗号进行分隔,可以用文本编辑器打开和编辑。以下是一个简单的示例:
Name,Age,Gender
Alice,25,Female
Bob,30,Male
Carol,35,Female
Excel文件格式
Excel文件是一种常见的电子表格文件格式,可以包含多个工作表。每个工作表由多行和多列组成,用于存储和展示数据。以下是一个简单的示例:
Name | Age | Gender |
---|---|---|
Alice | 25 | Female |
Bob | 30 | Male |
Carol | 35 | Female |
需求分析
我们需要将多个CSV文件合并成一个Excel文件,每个CSV文件对应一个工作表。在生成的Excel文件中,每个工作表的名称应该与对应的CSV文件名称一致,每个工作表的表头应该与第一个CSV文件的表头一致。
程序设计
为了实现这个功能,我们可以使用Apache POI库,它是一个用于读写Excel文件的Java库。我们需要导入以下依赖:
<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文件列表
- 创建Excel工作簿
- 遍历CSV文件列表,依次创建工作表并读取数据
- 将数据写入工作表
- 保存Excel文件
下面是示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class CSVToExcelConverter {
public static void main(String[] args) {
// 获取CSV文件列表
List<File> csvFiles = getCSVFiles("path/to/csv/directory");
// 创建Excel工作簿
Workbook workbook = new XSSFWorkbook();
// 遍历CSV文件列表
for (File csvFile : csvFiles) {
// 创建工作表
String sheetName = getCsvFileName(csvFile);
Sheet sheet = workbook.createSheet(sheetName);
// 读取CSV文件数据
List<String[]> data = readCSVFile(csvFile);
// 将数据写入工作表
writeDataToSheet(sheet, data);
}
// 保存Excel文件
saveExcelFile(workbook, "output.xlsx");
}
private static List<File> getCSVFiles(String directory) {
List<File> csvFiles = new ArrayList<>();
File folder = new File(directory);
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".csv")) {
csvFiles.add(file);
}
}
}
return csvFiles;
}
private static String getCsvFileName(File csvFile) {
String fileName = csvFile.getName();
return fileName.substring(0, fileName.lastIndexOf(".csv"));
}
private static List<String[]> readCSVFile(File csvFile) {
List<String[]> data = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(csvFile))) {
String line;
while ((line = reader.readLine()) != null) {
String[] row = line.split(",");
data.add(row);
}
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
private static void writeDataToSheet(Sheet sheet, List<String[]> data) {
int rowNumber = 0;
for (String[] row : data) {
Row excelRow = sheet.createRow(rowNumber++);
for (int i = 0; i < row.length; i++) {
Cell cell = excelRow.createCell(i);
cell.setCellValue(row[i]);
}
}
}
private static void saveExcelFile