如何在 Java 中读取 CSV 文件?

2024 年 10 月 23 日 | 阅读 7 分钟

CSV 代表逗号分隔值。它是一种简单的文件格式,用于以纯文本形式存储表格数据,例如电子表格或数据库。CSV 格式的文件可以导入和导出到以表格形式存储数据的程序(Microsoft Office 和 Excel)。CSV 文件使用分隔符来识别和分隔文件中的不同数据标记。当我们在原生格式不兼容的程序之间移动表格数据时,会使用 CSV 文件格式。CSV 文件的默认分隔符是逗号(,)。

CSV 文件用途

CSV 文件经常用于在各种软件程序之间传输数据,例如数据库管理系统、Microsoft Excel 等电子表格程序以及编程语言。它们提供了一种简单的方法来表示人类可读格式的结构化数据。

分隔符

CSV 文件包含多种分隔符,包括分号(;)、制表符(\t)和竖线(|)。默认分隔符是逗号(,)。这种灵活性有助于防止与可能包含逗号的数据发生冲突,并支持各种数据格式。

在 Java 中打印数组有以下几种方法

  • Java Scanner
  • Java String.split() 方法
  • 使用 OpenCSV API

如何创建 CSV 文件?

创建 CSV 文件有两种方法

  • 使用 Microsoft Excel
  • 使用 记事本

使用 Microsoft Excel

Microsoft Excel 是一款流行的电子表格程序,允许用户轻松地以表格形式创建和操作数据。以下是如何使用 Excel 创建 CSV 文件的方法:

步骤 1:打开 Excel:在您的计算机上启动 Microsoft Excel。

步骤 2:将以下数据写入文件

How To Read CSV File in Java

步骤 3:现在,保存文件。将文件名提供为 CSVDemo,然后从保存类型菜单中选择 CSV(逗号分隔)。现在,单击“保存”按钮。

How To Read CSV File in Java

使用记事本

步骤 1:打开记事本

步骤 2:在文件中写入一些用逗号(,)分隔的数据。例如:

Vivek, Singh, 23, 9999999, Chandigarh

步骤 3:将文件保存为.csv 扩展名。

我们已创建以下文件。

How To Read CSV File in Java

Java Scanner 类

Java Scanner 类提供了各种方法,我们可以通过这些方法读取 CSV 文件。Scanner 类提供了一个构造函数,该构造函数会扫描指定文件的值。它将数据分解为标记形式。它使用默认匹配空白字符的分隔符模式。然后使用 next() 方法将生成的标记转换为不同类型的值。

要使用 Scanner 类读取 CSV 文件,我们首先需要创建一个 Scanner 实例,并将文件对象作为参数传递给其构造函数。默认情况下,Scanner 使用空格作为分隔符,但我们可以指定自定义分隔符模式来处理 CSV 文件。

示例

输出

Shashank, Mishra, Auditor, 909090090, 45000, Moti Vihar
Naveen, Singh, Accountant, 213344455, 12000, Shastri Nagar
Mahesh, Nigam, Sr. Manager, 787878878, 30000, Ashok Nagar
Manish, Gupta, Manager, 999988765, 20000, Saket Nagar

解释

使用 Scanner 对象,提供的 Java 代码读取了一个名为“demo.csv”的 CSV(逗号分隔值)文件。它利用 useDelimiter() 方法将分隔符模式设置为逗号(,)。接下来,它使用 while 循环遍历文件内容,使用 hasNext() 检查是否还有更多标记可用,并使用 next() 输出每个标记。为了释放系统资源,它会在最后关闭 Scanner 对象。

Java String.split() 方法

Java String.split() 识别分隔符并将行拆分为标记。

Java 中的 split() 方法是 String 类的一部分,它用于根据指定的分隔符将字符串拆分为子字符串数组。以下是其工作原理的说明:

语法

该方法解析分隔的正则表达式。该方法返回通过围绕给定正则表达式的匹配项拆分此字符串而生成的字符串数组。

参数

regex:这是定义分隔符模式的正则表达式。字符串将在与此正则表达式匹配的地方被拆分。

返回值

通过围绕给定正则表达式的匹配项拆分原始字符串,生成一个字符串数组。

ReadCSVExample2.java

输出

Employee [First Name= Shashank, Last Name= Mishra, Designation= Auditor, 
Contact= 909090090, Salary= 45000, City= Moti Vihar]
Employee [First Name= Naveen, Last Name=Singh, Designation= Accountant, 
Contact=213344455, Salary= 12000, City= Shastri Nagar]
Employee [First Name= Mahesh, Last Name=Nigam, Designation= Sr. Manager, 
Contact=787878878, Salary= 30000, City= Ashok Nagar]
Employee [First Name= Manish, Last Name=Gupta, Designation= Manager, 
Contact=999988765, Salary= 20000, City= Saket Nagar]

解释

此 Java 代码使用 BufferedReader 逐行读取名为“demo.csv”的 CSV 文件。它根据逗号将每一行拆分为独立的 值,从而表示人员详细信息。它将每个人的解析后的值(包括名字、姓氏、职位、联系方式、薪水和城市)格式化为一个准备好的字符串。为了捕获和发布读取文件时可能出现的任何 IOExceptions,已开发了异常处理。

使用 OpenCSV API

OpenCSV 是一个第三方 API,提供标准库来读取各种版本的 CSV 文件。该库对处理 CSV 文件提供了更好的控制。该库还可以读取 TDF(制表符分隔文件)文件格式。

OpenCSV API 的特点

  1. 每行值数量可变:OpenCSV 可以处理每行值数量可变的 CSV 文件。
  2. 处理带引号的元素:它通过智能地忽略带引号元素中的逗号来确保准确解析。
  3. 多行条目:OpenCSV 支持跨越多行的条目,从而能够解析日益复杂的数据结构。

使用 CSVReader 类读取 CSV 文件。该类提供了 CSVReader 类构造函数来解析 CSV 文件。

语法

参数

reader:CSV 源的读取器。

separator:用于分隔条目的分隔符。

在 eclipse 中读取 CSV 文件的步骤

步骤 1:创建一个名为 ReadCSVExample3 的类文件,并编写以下代码。

步骤 2:在项目中创建一个 lib 文件夹。

步骤 3:从以下位置下载 opecsv-3.8.jar

https://repo1.maven.org/maven2/com/opencsv/opencsv/3.8/opencsv-3.8.jar

步骤 4:opencsv-3.8.jar 复制并粘贴到 lib 文件夹中。

步骤 5:现在,运行程序。

ReadCSVExample3.java

输出

Shashank Mishra Auditor 909090090 45000 Moti Vihar
Naveen Singh Accountant 213344455 12000 Shastri Nagar
Mahesh NigamSr. Manager 787878878 30000 Ashok Nagar
Manish Gupta Manager 999988765 20000 Saket Nagar

解释

此 Java 代码使用内置的 Java IO 类从名为“demo.csv”的 CSV 文件读取数据。它设置了变量来存储文件路径、分隔符和文件的每一行。它在 try-with-resources 块中生成一个 BufferedReader 来读取文件,并以逗号作为分隔符逐行迭代,将其拆分为标记。在打印每个标记后,它会前进到下一行。为了处理读取文件时可能发生的任何 IO 异常,已实现异常处理。如果发生异常,将打印堆栈跟踪。

ReadCSVExample4.java

输出

Shashank; Mishra; Auditor; 909090090; 45000; Moti Vihar		
Naveen; Singh; Accountant; 213344455; 12000; Shastri Nagar		
Mahesh; Nigam; Sr. Manager; 787878878; 30000; Ashok Nagar		
Manish; Gupta; Manager; 999988765; 20000; Saket Nagar	

结论

最后,还有其他方法可以在 Java 中读取 CSV 文件。这些方法包括使用内置的 Java IO 类 BufferedReader 和 FileReader,使用 String.split() 进行分词,或者使用具有自定义分隔符模式的 Scanner 类。此外,OpenCSV 等第三方库提供了强大的功能来管理 CSV 处理任务。所选方法取决于多种因素,包括文件的复杂性、所需的性能和预期的功能。


下一个主题Java 教程