使用阿里巴巴开源项目easyexcel解决poi的oom问题

easyexcel最新版本:1.1.2-beta4

源码git地址:easyexcel

maven坐标:

com.alibaba
easyexcel
1.1.2-beta4

一、定义Java模型,以Java模型解析excel文件

@Data
public class WeatherModel extends BaseRowModel {
    @ExcelProperty(index = 0)
    private String areaId;
    @ExcelProperty(index = 1)
    private String nameEn;
    @ExcelProperty(index = 2)
    private String nameCn;
}

二、读取小于1000行的Excel文件

/**
 * 读取小于1000行的数据
 */
private static void readSmallExcel(){
    String fileName = "/Users/xxx/Desktop/weather.xlsx";
    InputStream inputStream = getInputStream(fileName);
    try {
        //new Sheet(int sheetNum, int headLineNum, Class clazz)
        List data = EasyExcelFactory.read(inputStream, new Sheet(1, 1, WeatherModel.class));
        for(Object obj : data) {
            System.out.println(obj);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 
  
private static InputStream getInputStream(String fileName) {
    try {
        return new FileInputStream(new File(fileName));
    } catch(FileNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

三、读取大于1000行的数据

读取大于1000行数据的Excel时,采用回调方法

public class ExcelListener extends AnalysisEventListener {
    private List data = new ArrayList();
    
    @Override
    public void invoke(Object object, AnalysisContext context){
        System.out.println(data.size()+"-----"+object);
        data.add(object);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("------解析完毕-------");
    }
} 
  
/**
 * 读取大于1000行的excel
 */
private void readBigExcel() {

    String fileName = "/Users/xxx/Desktop/weather3000.xlsx";
    InputStream in = getInputStream(fileName);
    try {
        ExcelListener listener = new ExcelListener();
        EasyExcelFactory.readBySax(in, new Sheet(1, 1, WeatherModel.class), listener);
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

Excel文件贴图

使用阿里巴巴开源项目easyexcel解决poi的oom问题_第1张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(easyexcel)