Java 处理csv文件


本文参考 读取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);
		}

	}
}

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM