使用 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 文件的重要组件。