使用 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 文件的重要组件。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP