更多: 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;
}
}
可以使用 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
