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

java 8object oriented programmingprogramming更新于 2025/6/26 22:22: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]

相关文章