使用 OpenCSV 将 Java Bean 映射到 CSV


在我们这个数字化时代,全球每天都会产生大量的信息;有效地管理信息存储方法对于许多领域(包括企业)的成功至关重要。逗号分隔值 (CSV) 文件格式是一种备受用户欢迎的替代方案,因为它具有高效的功能和便捷性,以及经济方面的考虑。它是一种基于文本的选项,可以帮助以简单轻便的方式存储、处理和传输数据。但是,将 CSV 映射到更复杂的数据结构示例(如 Java Bean)在某些情况下可能是一个难题;但借助 OpenCSV,可以使一切都更容易理解,并能够将映射过程转换为 Java Bean 格式。

什么是 OpenCSV?

OpenCSV 是在 Java 中管理 CSV 文件的一个重要工具。这个备受推崇的库标配了一个易于导航的 API,允许您读取/写入包含标题的文件,同时利用自定义分隔符以及转义字符 - 毫不费力!OpenCSV 提供的另一个巨大优势在于,它简化了将复杂结构的数据集直接映射到相应的 Bean 类。OpenCSV 为用户提供了一种有效的方式来创建时尚多样的内容 - 复杂性和简洁性结合在一起,创造出最佳的输出。

使用 OpenCSV 将 Java Bean 映射到 CSV

使用 OpenCSV 在 Java Bean 和 CSV 文件之间编写映射需要四个主要步骤 - 定义、创建、映射和写入。在深入探讨这四个步骤之前,使用 OpenCSV 将 Java Bean 映射到 CSV 的四个步骤是:定义 Java Bean、创建 CSVWriter、将 Java Bean 映射到 CSV 以及写入 CSV 记录。定义好 Java Bean 后,创建一个 CSVWriter 来处理和管理数据的写入。接下来是将 Java Bean 映射到 CSV 文件,提供编写器所需的信息。最后,使用 CSVWriter 写入记录,从而确保您的数据以您想要的方式表达。通过这四个步骤,您将踏上掌握使用 OpenCSV 将 Java Bean 映射到 CSV 的艺术的道路。

将 OpenCSV 库添加到项目中

  • 步骤 1 - 对于 Maven 项目,在 pom.xml 文件中包含 OpenCSV Maven 依赖项。

<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>4.1</version>
</dependency>
  • 步骤 2 - 对于 Gradle 项目,包含 OpenCSV 依赖项。

Compile group: "com.opencsv", name: "opencsv", version: "4.1"
  • 步骤 3 - 您还可以下载 OpenCSV JAR 并将其包含在项目的类路径中。

将 Java Bean 映射到 CSV

  • 步骤 1 - 创建一个 Writer 实例,用于将数据写入 CSV 文件。

Writer writer =
Files.newbufferedWriter(Paths.get(file_location));
  • 步骤 2 - 创建一个对象列表,这些对象需要写入 CSV 文件。

  • 步骤 3 - 使用 ColumnPositionMappingStrategy 将创建的对象的列映射到 CSV 的列。

ColumnPositionMappingStrategy mappingStrategy = new
ColumnPositionMappingStrategy();
mappingStrategy.setType(Employee.class);
//where employee is the object to be mapped with CSV
  • 步骤 4 - 通过使用 StatefulBeanToCSVBuilder 类的 build 方法(以 writer 对象作为参数)创建 StatefulBeanToCSV 类的对象。根据需要,用户还可以提供 -

  • 使用 StatefulBeanToCSVBuilder 对象的 withMappingStrategy 函数,使用 ColumnPositionMappingStrategy。

  • 使用 StatefulBeanToCSVBuilder 对象的 withSeparator 函数,使用生成的 CSV 文件的分隔符。

  • 使用 StatefulBeanToCSVBuilder 对象的 withQuotechar 函数,使用生成的 csv 文件的 withQuotechar。

StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withMappingStrategy(mappingStrategy)
. withSeparator('#')
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
. build ();
  • 步骤 5 - 创建后,可以通过使用 StatefulBeanToCsv 对象中的 write 方法,将对象列表或单个对象添加到 csv 文件中。

beanToCsv.write(Employeelist);

示例

我们的目标是创建一个全面的 Employee 对象列表,每个对象都包含重要的属性,如姓名、年龄、公司和薪资。然后,我们将生成一个 CSV 文件 Employees.csv,其中包含 Employee 对象。

Employee.java

public class Employee {

   public String Name, Age, Company, Salary;

   public Employee(String name, String age,
      String company, String salary) {
      super();
      Name = name;
      Age = age;
      Company = company;
      Salary = salary;
   }
   
   @Override
   public String toString() {
      return "Employee [Name=" + Name + ",
      Age=" + Age + ", Company=" + Company + ",
      Salary=" + Salary + "]";
   }
}

BeanToCSV.java

import java.io.FileWriter;
import java.io.Writer;
import java.nio.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;

public class BeanToCSV {
   public static void main(String[] args) {

      // name of generated csv
      final String CSV_LOCATION = "Employees.csv ";

      try {

         // Creating writer class to generate
         // csv file
         FileWriter writer = newFileWriter(CSV_LOCATION);

         // create a list of employees
         List<Employee> EmployeeList = newArrayList<Employee>();
         Employee emp1 = new Employee
            ("Anurag", "24", "HTc", "75000");
         Employee emp2 = new Employee
            ("Amaan", "24", "Microsoft", "79000");
         Employee emp3 = new Employee
            ("Rashi", "26", "TCS", "39000");
         Employee emp4 = new Employee
            ("Varun", "22", "NgGear", "15000");
         Employee emp5 = new Employee
            ("Pranjal", "29", "Sath", "51000");
         EmployeeList.add(emp1);
         EmployeeList.add(emp2);
         EmployeeList.add(emp3);
         EmployeeList.add(emp4);
         EmployeeList.add(emp5);

         // Create Mapping Strategy to arrange the
         // column name in order
         ColumnPositionMappingStrategy mappingStrategy=
            new ColumnPositionMappingStrategy();
         mappingStrategy.setType(Employee.class);

         // Arrange column name as provided in below array.
         String[] columns = new String[]
            { "Name", "Age", "Company", "Salary" };
         mappingStrategy.setColumnMapping(columns);

         // Creating StatefulBeanToCsv object
         StatefulBeanToCsvBuilder<Employee> builder=
               new StatefulBeanToCsvBuilder(writer);
         StatefulBeanToCsv beanWriter =
            builder.withMappingStrategy(mappingStrategy).build();

         // Write list to StatefulBeanToCsv object
         beanWriter.write(EmployeeList);

         // closing the writer object
         writer.close();
      }
      catch (Exception e) {
         e.printStackTrace();
      }
   }
}

输出

EmployeeData.csv
CSV file contains: ----

"Anurag", "24", "HTc", "75000"
"Amaan", "24", "Microsoft", "79000"
"Rashi", "26", "TCS", "39000"
"Varun", "22", "NgGear", "15000"
"Pranjal", "29", "Sath", "51000"

结论

Java 的 Open CSV 是一款强大的工具,可以简化 CSV 文件的读取和写入,因此,如果您需要一种更简单的方法来处理 CSV 文件中复杂的数据结构,那么 Open CSV 就是您的不二之选 - 这个工具可以将 Java Bean 映射到该格式。简单地定义 Java Bean 并将其映射到 CSV 就足以通过几行代码生成编写良好的 CSV 记录,并且 Open CSV 的灵活性和可靠性使其成为有效管理数据驱动应用程序中 CSV 文件的重要组件。

更新于: 2023 年 7 月 28 日

2K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告