如何使用 Java 从 .csv 文件读取数据?

java 8object oriented programmingprogramming更新于 2025/11/20 5:32:17

OpenCSV 库提供了用于从 .csv 文件读取数据和将数据写入 .csv 文件的 API。本文将讲解如何使用 Java 程序读取 .csv 文件的内容。

Maven 依赖项

<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>4.4</version>
</dependency>
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.9</version>
</dependency>

com.opencsv 包中的 CSVReader 类代表一个简单的 CSV 阅读器。实例化此类时,需要将表示要读取文件的 Reader 对象作为参数传递给其构造函数。它提供了名为 readAll() 和 readNext() 的方法来读取 .csv 文件的内容。

使用 readNext() 方法

CSVReader 类的 readNext() 方法读取 .csv 文件的下一行,并以字符串数组的形式返回。

示例

以下 Java 程序演示了如何使用 readNext() 方法读取 .csv 文件的内容。

import java.io.FileReader;
import com.opencsv.CSVReader;
public class ReadFromCSV {
   public static void main(String args[]) throws Exception {
      //实例化 CSVReader 类
      CSVReader reader = new CSVReader(new FileReader("D://sample.csv"));
      //读取 csv 文件的内容
      StringBuffer buffer = new StringBuffer();
      String line[];
      while ((line = reader.readNext()) != null) {
         for(int i = 0; i<line.length; i++) {
            System.out.print(line[i]+" ");
         }
         System.out.println(" ");
      }
   }
}

输出

id name salary start_date dept
1 Rick 623.3 2012-01-01 IT
2 Dan 515.2 2013-09-23 Operations
3 Michelle 611 2014-11-15 IT
4 Ryan 729 2014-05-11 HR
5 Gary 843.25 2015-03-27 Finance
6 Nina 578 2013-05-21 IT
7 Simon 632.8 2013-07-30 Operations
8 Guru 722.5 2014-06-17 Finance

使用 readAll() 方法

此方法将 .csv 文件的内容一次性读取到 String 数组类型的 List 对象中。

示例

以下 Java 程序演示了如何使用 readAll() 方法读取 .csv 文件的内容。

import java.io.FileReader;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import com.opencsv.CSVReader;
public class ReadFromCSV {
   public static void main(String args[]) throws Exception {
      //实例化 CSVReader 类
      CSVReader reader = new CSVReader(new FileReader("D://sample.csv"));
      //读取 csv 文件的内容
      List list = reader.readAll();
      //获取迭代器对象
      Iterator it = list.iterator();
      while(it.hasNext()) {
         String[] str = (String[]) it.next();
         System.out.println(Arrays.toString(str));
      }
   }
}

输出

[id, name, salary, start_date, dept]
[1, Rick, 623.3, 2012-01-01, IT]
[2, Dan, 515.2, 2013-09-23, Operations]
[3, Michelle, 611, 2014-11-15, IT]
[4, Ryan, 729, 2014-05-11, HR]
[5, Gary, 843.25, 2015-03-27, Finance]
[6, Nina, 578, 2013-05-21, IT]
[7, Simon, 632.8, 2013-07-30, Operations]
[8, Guru, 722.5, 2014-06-17, Finance]

使用迭代器

除了以上两种方法之外,您还可以获取 CSVReader 对象的迭代器,并使用迭代器的 hasNext() 和 next() 方法读取 .csv 文件的内容。

示例

import java.io.FileReader;
import java.util.Arrays;
import java.util.Iterator;
import com.opencsv.CSVReader;
public class ReadFromCSV {
   公共静态 void main(String args[]) 抛出异常 {
      //实例化 CSVReader 类
      CSVReader reader = new CSVReader(new FileReader("D://sample.csv"));
      //读取 csv 文件的内容
      StringBuffer buffer = new StringBuffer();
      String line[];
      //获取此读取器的迭代器对象
      Iterator it = reader.iterator();
      while (it.hasNext()) {
         line = (String[]) it.next();
         System.out.println(Arrays.toString(line));
         System.out.println(" ");
      }
   }
}

输出

[id, name, salary, start_date, dept]
[1, Rick, 623.3, 2012-01-01, IT]
[2, Dan, 515.2, 2013-09-23, Operations]
[3, Michelle, 611, 2014-11-15, IT]
[4, Ryan, 729, 2014-05-11, HR]
[5, Gary, 843.25, 2015-03-27, Finance]
[6, Nina, 578, 2013-05-21, IT]
[7, Simon, 632.8, 2013-07-30, Operations]
[8, Guru, 722.5, 2014-06-17, Finance]

相关文章