本文參考 讀取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);
}
}
}
