更多: 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