1、导入jar
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2、DEMO
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import org.junit.Test;
import java.io.*
public class ExcelExcutor {
@Test
public void stripeDataRead() throws IOException {
File file = new File("/Users/Downloads/js_20201207.js");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String fileName = "/Users/didi/Downloads/20201207.csv";
ExcelReader excelReader = null;
try {
excelReader = EasyExcel.read(fileName, StripeData.class, new StripeDataListener(fileOutputStream)).build();
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
} finally {
if (excelReader != null) {
excelReader.finish();
}
fileOutputStream.close();
}
}
}
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StripeData {
@ExcelProperty(value = "_id", index = 0)
private String _id;
private String created;
private String card_exp_month;
private String card_exp_year;
private String card_bin;
private String card_last_4;
private String amount;
private String currency;
private String card_country;
private String card_issuer;
private String card_funding;
private String card_network;
private String reference;
private String partner;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
public String getCard_exp_month() {
return card_exp_month;
}
public void setCard_exp_month(String card_exp_month) {
this.card_exp_month = card_exp_month;
}
public String getCard_exp_year() {
return card_exp_year;
}
public void setCard_exp_year(String card_exp_year) {
this.card_exp_year = card_exp_year;
}
public String getCard_bin() {
return card_bin;
}
public void setCard_bin(String card_bin) {
this.card_bin = card_bin;
}
public String getCard_last_4() {
return card_last_4;
}
public void setCard_last_4(String card_last_4) {
this.card_last_4 = card_last_4;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getCard_country() {
return card_country;
}
public void setCard_country(String card_country) {
this.card_country = card_country;
}
public String getCard_issuer() {
return card_issuer;
}
public void setCard_issuer(String card_issuer) {
this.card_issuer = card_issuer;
}
public String getCard_funding() {
return card_funding;
}
public void setCard_funding(String card_funding) {
this.card_funding = card_funding;
}
public String getCard_network() {
return card_network;
}
public void setCard_network(String card_network) {
this.card_network = card_network;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public String getPartner() {
return partner;
}
public void setPartner(String partner) {
this.partner = partner;
}
}
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class StripeDataListener extends AnalysisEventListener<StripeData> {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List<StripeData> list = new ArrayList<StripeData>();
FileOutputStream fileOutputStream;
public StripeDataListener(FileOutputStream fileOutputStream) {
this.fileOutputStream = fileOutputStream;
}
/**
* 这个每一条数据解析都会来调用
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(StripeData data, AnalysisContext context) {
try {
StringBuffer sb = new StringBuffer();
String created = data.getCreated();
created = created.replace("T", " ").replace("Z", " ");
if (created.contains(".")) {
created = created.substring(0, created.indexOf("."));
}
data.setCreated(created);
sb.append("db.stripe_success.insert(").append(JSON.toJSONString(data).replace("_id", "charge_id")).append(");");
fileOutputStream.write(sb.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
list.add(data);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
list.clear();
}
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
saveData();
}
/**
* 加上存储数据库
*/
private void saveData() {
}
}