Java多个CSV文件合并成一个

在日常的数据处理过程中,经常会遇到需要将多个CSV文件合并成一个的情况。CSV(Comma-Separated Values)是一种常见的文件格式,用于存储表格数据。本文将介绍如何使用Java代码将多个CSV文件合并成一个,并提供示例代码。

CSV文件格式

CSV文件由多行组成,每行代表表格中的一行数据,字段之间用逗号分隔。通常,CSV文件的第一行是表头,后续行是数据行。

假设我们有两个CSV文件,file1.csvfile2.csv,它们的内容如下:

file1.csv:

name,age,city
John,25,New York
Alice,30,San Francisco

file2.csv:

name,age,city
Bob,35,London
Jane,28,Tokyo

我们的目标是将这两个文件合并成一个文件,得到如下结果:

merged.csv:

name,age,city
John,25,New York
Alice,30,San Francisco
Bob,35,London
Jane,28,Tokyo

代码实现

我们可以使用Java的CSV库来处理CSV文件,例如Apache Commons CSV或OpenCSV。这两个库都提供了读取和写入CSV文件的功能。在本文中,我们将使用Apache Commons CSV库来实现文件合并的功能。

首先,我们需要添加Apache Commons CSV库的依赖。如果使用构建工具如Maven或Gradle,可以通过添加以下依赖来导入库:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.8</version>
</dependency>

接下来,我们可以编写Java代码来合并CSV文件。以下是一个示例代码:

import org.apache.commons.csv.*;

import java.io.*;

public class CSVFileMerger {
    public static void main(String[] args) {
        String[] inputFiles = {"file1.csv", "file2.csv"};
        String outputFile = "merged.csv";

        try {
            FileWriter writer = new FileWriter(outputFile);
            CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader());

            for (String inputFile : inputFiles) {
                FileReader reader = new FileReader(inputFile);
                CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withFirstRecordAsHeader());

                for (CSVRecord csvRecord : csvParser) {
                    csvPrinter.printRecord(csvRecord);
                }

                csvParser.close();
                reader.close();
            }

            csvPrinter.close();
            writer.close();

            System.out.println("CSV files merged successfully.");
        } catch (IOException e) {
            System.out.println("Error merging CSV files: " + e.getMessage());
        }
    }
}

上述代码中,我们首先定义了输入文件数组inputFiles和输出文件outputFile的路径。然后,我们创建一个FileWriter来写入合并后的CSV文件,使用CSVPrinter来写入CSV记录。

在循环中,我们遍历输入文件数组,对每个文件进行读取。我们使用CSVParser来解析CSV文件,并使用CSVRecord来访问每一行的数据。通过csvPrinter.printRecord(csvRecord)将数据写入到输出文件中。

最后,我们关闭所有的读写资源,并输出合并成功的提示信息。

类图

下面是合并CSV文件的类图示例:

classDiagram
    class CSVFileMerger{
        -String[] inputFiles
        -String outputFile
        +void main(String[] args)
    }

甘特图

下面是合并CSV文件的甘特图示例:

gantt
    dateFormat  YYYY-MM-DD
    title CSV File Merger
    section Merge CSV Files
    Read Input File 1    :done, 2022-01-01, 1d
    Read Input File 2    :done, 2022-01-02, 1d
    Write Output File    :done, 2022-01-03, 1d
    section Close Resources
    Close CSV Parser 1   :done, 2022-01-04, 1d
    Close CSV Parser 2   :done, 2022-01-05, 1d
    Close File Reader 1  :done, 2022-01-06, 1d
    Close File Reader 2  :done, 2022-01-07, 1d
    Close CSV Printer    :done, 2022-