更多: zhilu jiaocheng

Java读取 CSV 到 Java bean

OpenCSV 还提供了将 CSV 文件直接读取到 Java bean 的功能。

Java Bean

public class Employee implements Serializable
{
   private static final long serialVersionUID = 1L;

   private String id;
   private String firstName;
   private String lastName;
   private String country;
   private String age;

   //Getters and setters

   @Override
   public String toString()
   {
      return "Employee [id=" + id + ", firstName=" + firstName + ", 
				lastName=" + lastName + ", country=" + country + ", age=" + age + "]";
   }
}

Java 将读取 CSV 到 Java bean

下面的示例读取 data.csv文件并填充 Employee.java的实例。

import java.io.FileReader;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
public class CSVMappedToJavaBeanExample
{
   @SuppressWarnings({"rawtypes", "unchecked"})
   public static void main(String[] args) throws Exception
   {
      CsvToBean csv = new CsvToBean();

      String csvFilename = "data.csv";
      CSVReader csvReader = new CSVReader(new FileReader(csvFilename));

	  // 设置列映射
      List list = csv.parse(setColumMapping(), csvReader);

      for (Object object : list) {
          Employee employee = (Employee) object;
          System.out.println(employee);
      }
   }

   @SuppressWarnings({"rawtypes", "unchecked"})
   private static ColumnPositionMappingStrategy setColumMapping()
   {
      ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
      strategy.setType(Employee.class);
      String[] columns = new String[] {"id", "firstName", "lastName", "country", "age"}; 
      strategy.setColumnMapping(columns);
      return strategy;
   }
}
Java 如何读取 CSV 文件

可以使用 OpenCSV 。OpenCSV 中有几个类:

  • CSVParser :在商业友好许可下发布的非常简单的 CSV 解析器。

这只是实现将单行拆分为字段。

  • CSVReader :在从 Java 应用程序代码中读取 CSV 文件时,我们将在大多数情况下使用此类。

此类提供了许多有用的构造函数来构建具有不同选项和功能的 CSVReader。例如,我们可以提供不同的分隔符(默认为逗号)、不同的引号字符(默认为双引号),甚至我们还可以提供解析应该开始的初始行号。

  • CSVWriter : CSVWriter 也非常可定制,就像 CSVReader一样。

我们可以在使用 Java 应用程序代码编写 CSV 文件时使用自定义分隔符、自定义引号字符或者自定义行终止符。

  • CsvToBean :当我们想从 CSV 文件内容填充 Java bean 时,将使用此类。

Java 使用 OpenCSV读取 CSV 文件 文件示例

Java 逐行读取 CSV 文件

import java.io.FileReader;
import java.util.Arrays;
import au.com.bytecode.opencsv.CSVReader;
public class ParseCSVLineByLine
{
   @SuppressWarnings("resource")
   public static void main(String[] args) throws Exception
   {
      //创建reader实例
	  //读取文件 data.csv
	  //默认分隔符为逗号
	  //默认使用的引号是双引号
	  //从第2行开始读取
      CSVReader reader = new CSVReader(new FileReader("data.csv"), ',' , '"' , 1);
	  
	  // CSVReader reader = new CSVReader(new FileReader("data.csv"), ';', '"', 1); 指定使用分号;作为分隔符

      // 逐行读取,保存到数组中
      String[] nextLine;
      while ((nextLine = reader.readNext()) != null) {
         if (nextLine != null) {
			// 查看读取的数据
            System.out.println(Arrays.toString(nextLine));
         }
       }
   }
}

读取整个CSV 文件并逐行迭代

我们还可以一次性读取整个 CSV 文件数据,然后再进行迭代处理:

import java.io.FileReader;
import java.util.Arrays;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
public class ParseFullCSVExample
{
   @SuppressWarnings("resource")
   public static void main(String[] args) throws Exception
   {
      //创建 reader 实例
      CSVReader reader = new CSVReader(new FileReader("data.csv"), ',', '"', 1);

      // 读取所有的数据行
      List<String[]> allRows = reader.readAll();

      // 逐行进行处理
     for(String[] row : allRows){
        System.out.println(Arrays.toString(row));
     }
   }
}
日期:2020-09-17 00:09:24 来源:oir作者:oir