本文参考 读取CSV格式文件,请参考原文
添加依赖
<properties> <projecglombok.version>1.18.18</projecglombok.version> <poi.version>5.0.0</poi.version> </properties> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-csv</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${projecglombok.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency>
有实体类如下
import lombok.Data; @Data public class Person { private String name; private Integer age; private String hobby; public Person(String name, Integer age, String hobby) { super(); this.name = name; this.age = age; this.hobby = hobby; } /** * 必须,否则loadObjectList()方法会报错 */ public Person() { super(); } }
工具类
实现的方法有:
- 把实体类写入csv文件
- 从csv文件读入实体类
- 把csv文件转存为xlsx文件
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.MappingIterator; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema; public class CSVUtils { private static Logger logger = LoggerFactory.getLogger(CSVUtils.class); private static String csvFile = "C:\\test\\PersonList.csv"; private static String excelFile = "C:\\test\\PersonList.xlsx"; public static void main(String[] args) { // 调用objectList2CSV Person person1 = new Person("linda", 12, "laughing"); Person person2 = new Person("melody", 22, "reading"); Person person3 = new Person("sara", 32, "sleeping"); List<Person> persons = new ArrayList<Person>(); persons.add(person1); persons.add(person2); persons.add(person3); try { CSVUtils.objectList2CSV(persons, new File(csvFile), Person.class); } catch (IOException e) { logger.error(e.getMessage(), e); } // 调用loadObjectList List<Person> personList = new ArrayList<>(); try { personList = CSVUtils.loadObjectList(Person.class, csvFile); } catch (IOException e) { logger.error(e.getMessage(), e); } logger.info("size {}", personList.size()); // 调用csv2excel csv2excel(csvFile, excelFile); } /** * 从csv文件读取实体类 */ public static <T> List<T> loadObjectList(Class<T> type, String fileName) throws IOException { CsvSchema bootstrapSchema = CsvSchema.emptySchema().withHeader(); CsvMapper mapper = new CsvMapper(); File file = new File(fileName); MappingIterator<T> readValues = mapper.readerFor(type).with(bootstrapSchema).readValues(file); return readValues.readAll(); } /** * 把实体类写入到csv文件 */ public static <T> void objectList2CSV(List<T> list, File csvFile, Class<T> clazz) throws IOException { CsvMapper mapper = new CsvMapper(); CsvSchema schema = mapper.schemaFor(clazz); ObjectWriter writer = mapper.writer(schema.withLineSeparator("\n").withHeader()); writer.writeValue(csvFile, list); } /** * 将数据写入到excel中 */ public static void csv2excel(String csvFile, String excelFile) { // 创建Excel XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("name"); cell = row.createCell(1); cell.setCellValue("age"); cell = row.createCell(2); cell.setCellValue("hobby"); try { // 逐行读取csv文件 DataInputStream in = new DataInputStream(new FileInputStream(csvFile)); BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8")); reader.readLine();// 第一行信息,为标题信息,不用,如果需要,注释掉 String line = null; for (int i = 0; (line = reader.readLine()) != null; i++) { // CSV格式文件为逗号分隔符文件,这里根据逗号切分 String item[] = line.split(","); Row row1 = sheet.createRow(i + 1); row1.createCell(0).setCellValue(item[2]); row1.createCell(1).setCellValue(item[0]); row1.createCell(2).setCellValue(item[1]); } // 将文件保存到指定的位置 FileOutputStream fos = new FileOutputStream(excelFile); workbook.write(fos); logger.info("csv 2 excel successfully"); fos.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } } }