使用OpenCSV将Java Beans映射到CSV
在我们数字化的时代,每天在全球范围内产生大量信息; 高效管理信息存储方法对许多领域(包括企业)的成功至关重要。在这方面,一种替代方案在近年来广受用户欢迎,它具有有效的功能和便利性,并且从经济角度来看也很不错,那就是逗号分隔值(CSV)文件格式。它是一种基于文本的选择,可以以简单轻便的方式存储、操作和传输数据。尽管如此,将CSV映射到更复杂的数据结构示例,如Java Beans,可能在某些情况下代表一项艰巨的挑战; 但使用OpenCSV可以使一切更加易于理解,并能将其映射过程转换为Java Beans格式。
什么是OpenCSV
在Java中管理CSV文件的一个基本工具是OpenCSV。这个备受推崇的库提供了一个易于导航的API,可以让您在读/写包含标题的文件时使用自定义分隔符和转义字符 – 轻松搞定! OpenCSV提供的另一个巨大优势是可以简化地将复杂的数据集直接映射到相应的Bean类。 OpenCSV为用户提供了一种有效的方式来创建漂亮和多样化的内容 – 复杂性和强大性结合在一起,创建了一个最佳输出。
使用OpenCSV将Java Beans映射到CSV
使用OpenCSV将Java Beans映射到CSV文件需要四个主要步骤 – 定义、创建、映射和写入。在进行这四个步骤之前,先介绍一下使用OpenCSV将Java Beans映射到CSV的四个步骤:定义Java Bean,创建CSVWriter,将Java Bean映射到CSV,以及写入CSV记录。在定义完Java Bean之后,创建一个CSVWriter来处理和处理数据的写入。接下来是将Java Bean映射到CSV文件,提供写入器所需的信息。最后,使用CSVWriter写入记录,以确保数据按照您想要的方式表达出来。通过这四个步骤,您将掌握使用OpenCSV将Java Beans映射到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 Beans 映射到 CSV
- 第1步: − 为向 CSV 文件写入数据创建一个 Writer 实例。
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文件的引用字符。
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withMappingStrategy(mappingStrategy)
. withSeparator('#')
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
. build ();
- 第5步 − 在创建之后,通过在StatefulBeanToCsv对象中使用write方法,可以将对象列表或单个对象添加到CSV文件中。
beanToCsv.write(Employeelist);
示例
我们的目标是创建一个包含员工对象的全面列表,每个对象都包含重要属性,如姓名、年龄、公司和薪水。然后,我们将生成一个名为Employees.csv的CSV文件,其中包含员工对象。
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 beans映射到CSV格式中。简单地定义Java Bean,并将其映射到CSV格式即可通过几行代码生成良好写入的CSV记录,而Open CSV的灵活性和可靠性使其成为在数据驱动的应用程序中有效管理CSV文件的重要组成部分。