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>

我们的程序主要包括以下几个步骤:

  1. 获取CSV文件列表
  2. 创建Excel工作簿
  3. 遍历CSV文件列表,依次创建工作表并读取数据
  4. 将数据写入工作表
  5. 保存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