如何在Java中读取CSV文件

本文概述

  • 如何创建CSV文件
  • Java Scanner类
  • Java String.split()方法
  • 使用OpenCSV API
CSV代表逗号分隔值。它是一种简单的文件格式, 用于以简单文本形式存储表格数据, 例如电子表格或数据库。可以将CSV格式的文件导入或导出到将数据存储在表中的程序(Microsoft Office和Excel)中。 CSV文件使用定界符来标识和分隔文件中的不同数据令牌。当我们在本机以不兼容格式运行的程序之间移动表格数据时, 将使用CSV文件格式。有以下几种方法可以读取Java中的CSV文件。 CSV文件的默认分隔符是逗号(, )。
有以下几种在Java中打印数组的方法:
  • Java Scanner类
  • Java String.split()方法
  • 使用OpenCSV API
如何创建CSV文件 有两种创建CSV文件的方法:
  • 使用Microsoft Excel
  • 使用记事本
使用Microsoft Excel
步骤1:打开Microsoft Excel。
步骤2:将以下数据写入文件:
如何在Java中读取CSV文件

文章图片
步骤3:现在, 保存文件。提供文件名CSVDemo并从“保存类型”菜单中选择CSV(逗号分隔)。现在, 单击“保存”按钮。
如何在Java中读取CSV文件

文章图片
使用记事本
步骤1:打开记事本。
步骤2:将一些数据写入用逗号(, )分隔的文件中。例如:
Vivek, Singh, 23, 9999999, 昌迪加
步骤3:以.csv扩展名保存文件。
我们创建了以下文件。
如何在Java中读取CSV文件

文章图片
Java Scanner类 Java Scanner类提供了多种读取CSV文件的方法。 Scanner类提供了一个构造函数, 该构造函数生成从指定文件扫描的值。它将数据分解为令牌形式。它使用默认情况下与空格匹配的定界符模式。然后, 使用next()方法将生成的令牌转换为不同类型的值。

import java.io.*; import java.util.Scanner; public class ReadCSVExample1 { public static void main(String[] args) throws Exception { //parsing a CSV file into Scanner class constructor Scanner sc = new Scanner(new File("F:\\CSVDemo.csv")); sc.useDelimiter(", "); //sets the delimiter pattern while (sc.hasNext())//returns a boolean value { System.out.print(sc.next()); //find and returns the next complete token from this scanner } sc.close(); //closes the scanner } }

输出:
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 String.split()方法 Java String.split()标识定界符, 并将行拆分为标记。
句法
public String[] split(String regex)

该方法解析定界正则表达式。该方法返回一个字符串数组, 该字符串是通过在给定正则表达式的匹配项周围拆分此字符串而计算得出的。
考虑以下字符串:
“ this:is:a:table”正则表达式结果:{“ this”, “ is”, “ a”, “ table”}

【如何在Java中读取CSV文件】在下面的示例中, 我们使用BufferedReader类, 该类逐行读取文件, 直到到达EOF(文件结尾)字符为止。
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadCSVExample2 { public static void main(String[] args) { String line = ""; String splitBy = ", "; try { //parsing a CSV file into BufferedReader class constructor BufferedReader br = new BufferedReader(new FileReader("CSVDemo.csv")); while ((line = br.readLine()) != null)//returns a Boolean value { String[] employee = line.split(splitBy); // use comma as separator System.out.println("Employee [First Name=" + employee[0] + ", Last Name=" + employee[1] + ", Designation=" + employee[2] + ", Contact=" + employee[3] + ", Salary= " + employee[4] + ", City= " + employee[5] +"]"); } } catch (IOException e) { e.printStackTrace(); } } }

输出:
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]

使用OpenCSV API OpenCSV是第三方API, 它提供标准库来读取各种版本的CSV文件。该库提供了更好的控制来处理CSV文件。该库还可以读取TDF(制表符分隔文件)文件格式。
OpenCSV的功能
  • 每行任意数量的值。
  • 忽略引号中的逗号。
  • 处理跨多行的条目。
CSVReader类用于读取CSV文件。该类提供CSVReader类构造函数来解析CSV文件。
句法
public CSVReder(Reader reader, char separator) OR public CSVReder(Reader reader)

参量
reader:CSV源的阅读器。
分隔符:这是一个分隔符, 用于分隔条目。
在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:现在, 运行程序。

import java.io.FileReader; import com.opencsv.CSVReader; public class ReadCSVExample3 { public static void main(String[] args) { CSVReader reader = null; try { //parsing a CSV file into CSVReader class constructor reader = new CSVReader(new FileReader("F:\\CSVDemo.csv")); String [] nextLine; //reads one line at a time while ((nextLine = reader.readNext()) != null) { for(String token : nextLine) { System.out.print(token); } System.out.print("\n"); } } catch (Exception e) { e.printStackTrace(); } } }

输出:
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

使用其他分隔符读取CSV文件
在以下CSV文件中, 我们使用了分号(; )来分隔标记。
如何在Java中读取CSV文件

文章图片

import java.io.FileReader; import java.io.IOException; import com.opencsv.CSVReader; public class ReadCSVExample4 { public static void main(String[] args) { CSVReader reader = null; try { reader = new CSVReader(new FileReader("F:\\CSVDemo.csv")); String [] nextLine; //read one line at a time while ((nextLine = reader.readNext()) != null) { for(String token : nextLine) { System.out.println(token); } System.out.print("\n"); } } catch (Exception e) { e.printStackTrace(); } } }

输出:
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

    推荐阅读