使用 Java 读取 CSV 文件的简单指南

CSV(Comma-Separated Values,逗号分隔值)文件是存储表格数据的一种广泛使用的格式,常用于数据的导入和导出。Java 提供了多种方式来读取 CSV 文件,在这篇文章中,我们将探讨如何使用 Java 来读取 CSV 文件,并通过简单的示例帮助您入门。

CSV 文件简介

CSV 文件的格式相对简单,每一行通常表示一个记录,字段之间用逗号分隔。以下是一个简单的 CSV 文件示例:

姓名,年龄,城市
张三,25,北京
李四,30,上海
王五,22,广州

这个文件包含了三列信息:姓名、年龄和城市。

Java 读取 CSV 文件的方法

在 Java 中,您可以使用标准库和第三方库来读取 CSV 文件。常见的方法包括:

  1. 使用 BufferedReader 读取文件。
  2. 使用第三方库(如 OpenCSV 或 Apache Commons CSV)。

下面我们将逐一探讨这些方法。

方法一:使用 BufferedReader

BufferedReader 是 Java 内置的类,能够高效地读取文本文件。以下是一个使用 BufferedReader 读取 CSV 文件的示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CsvReader {
    public static void main(String[] args) {
        String csvFile = "data.csv"; // CSV 文件路径
        String line;
        String csvSplitBy = ","; // 分隔符

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            // 读取表头
            if ((line = br.readLine()) != null) {
                String[] headers = line.split(csvSplitBy);
                System.out.println("表头: " + String.join(", ", headers));
            }

            // 读取数据行
            while ((line = br.readLine()) != null) {
                String[] data = line.split(csvSplitBy);
                System.out.printf("姓名: %s, 年龄: %s, 城市: %s%n", data[0], data[1], data[2]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们首先定义了 CSV 文件的路径,然后使用 BufferedReader 来读取文件。我们使用 split 方法将每行数据分割成字段,并打印输出。

方法二:使用 OpenCSV

OpenCSV 是一个流行的 Java 库,专门用于处理 CSV 文件。它简化了 CSV 文件的读取和写入过程。首先,您需要添加 OpenCSV 的依赖。在 pom.xml 中加入以下内容(如果使用 Maven):

<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.5.2</version>
</dependency>

接下来,您可以使用以下代码读取 CSV 文件:

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;

public class OpenCsvExample {
    public static void main(String[] args) {
        String csvFile = "data.csv"; // CSV 文件路径

        try (CSVReader csvReader = new CSVReader(new FileReader(csvFile))) {
            String[] headers = csvReader.readNext(); // 读取表头
            System.out.println("表头: " + String.join(", ", headers));

            String[] data;
            while ((data = csvReader.readNext()) != null) {
                System.out.printf("姓名: %s, 年龄: %s, 城市: %s%n", data[0], data[1], data[2]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,使用 CSVReader 类读取 CSV 文件,简化了读取表头和数据行的过程。

方法三:使用 Apache Commons CSV

Apache Commons CSV 是另一个强大的库,可以用来读取和写入 CSV 文件。首先,在 pom.xml 中添加以下依赖:

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

以下是使用 Apache Commons CSV 读取 CSV 文件的示例:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CommonsCsvExample {
    public static void main(String[] args) {
        String csvFile = "data.csv"; // CSV 文件路径

        try {
            Reader in = new FileReader(csvFile);
            Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in);

            for (CSVRecord record : records) {
                System.out.printf("姓名: %s, 年龄: %s, 城市: %s%n", record.get("姓名"), record.get("年龄"), record.get("城市"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

通过 CSVFormat 类的 withFirstRecordAsHeader 方法,我们可以轻松地指定 CSV 的表头,从而更方便地访问数据字段。

总结

在这篇文章中,我们介绍了如何在 Java 中读取 CSV 文件,探讨了使用 BufferedReader、OpenCSV 和 Apache Commons CSV 三种方法。根据你的需求,可以选择最适合的方法来处理 CSV 文件。

  • BufferedReader 适合简单的场景,但要手动处理数据。
  • OpenCSVApache Commons CSV 提供了更高层次的封装,适合复杂的 CSV 处理需求。

不论您选择哪种方法,都可以通过这些工具轻松地实现 CSV 文件的读取,为您的 Java 应用程序提供数据支持。希望这篇文章能帮助您更好地了解如何在 Java 中处理 CSV 文件。