<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          史上最全的Excel導(dǎo)入導(dǎo)出之easyexcel

          共 2220字,需瀏覽 5分鐘

           ·

          2021-10-13 23:44

          喝水不忘挖井人,感謝阿里巴巴項目組提供了easyexcel工具類,github地址:https://github.com/alibaba/easyexcel


          環(huán)境搭建

          • easyexcel 依賴(必須)
          • springboot (不是必須)

          • lombok (不是必須)

          ?
          ???com.alibaba
          ???easyexcel
          ???1.1.2-beat1
          ?

          ??
          ?
          ???org.projectlombok
          ???lombok
          ???1.18.2
          ?


          讀取excel文件

          小于1000行數(shù)據(jù)

          默認讀取

          讀取Sheet1的全部數(shù)據(jù)

          ?String?filePath?=?"/home/chenmingjian/Downloads/學(xué)生表.xlsx";
          ?List?objects?=?ExcelUtil.readLessThan1000Row(filePath);

          指定讀取

          下面是學(xué)生表.xlsx中Sheet1,Sheet2的數(shù)據(jù)


          獲取Sheet1表頭以下的信息

          String?filePath?=?"/home/chenmingjian/Downloads/學(xué)生表.xlsx";
          //第一個1代表sheet1,?第二個1代表從第幾行開始讀取數(shù)據(jù),行號最小值為0
          Sheet?sheet?=?new?Sheet(1,?1);
          List?objects?=?ExcelUtil.readLessThan1000Row(filePath,sheet);

          獲取Sheet2的所有信息

          ?String?filePath?=?"/home/chenmingjian/Downloads/學(xué)生表.xlsx";
          ?Sheet?sheet?=?new?Sheet(2,?0);
          ?List?objects?=?ExcelUtil.readLessThan1000Row(filePath,sheet);

          大于1000行數(shù)據(jù)

          默認讀取

          String?filePath?=?"/home/chenmingjian/Downloads/學(xué)生表.xlsx";
          List?objects?=?ExcelUtil.readMoreThan1000Row(filePath);

          指定讀取

          String?filePath?=?"/home/chenmingjian/Downloads/學(xué)生表.xlsx";
          Sheet?sheet?=?new?Sheet(1,?2);
          List?objects?=?ExcelUtil.readMoreThan1000Row(filePath,sheet);

          導(dǎo)出excle

          單個Sheet導(dǎo)出

          無模型映射導(dǎo)出

          String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          List>?data?=?new?ArrayList<>();
          data.add(Arrays.asList("111","222","333"));
          data.add(Arrays.asList("111","222","333"));
          data.add(Arrays.asList("111","222","333"));
          List?head?=?Arrays.asList("表頭1",?"表頭2",?"表頭3");
          ExcelUtil.writeBySimple(filePath,data,head);

          結(jié)果

          模型映射導(dǎo)出

          1、定義好模型對象

          package?com.springboot.utils.excel.test;

          import?com.alibaba.excel.annotation.ExcelProperty;
          import?com.alibaba.excel.metadata.BaseRowModel;
          import?lombok.Data;
          import?lombok.EqualsAndHashCode;

          /**
          ?*?@description:
          ?*?@author:?chenmingjian
          ?*?@date:?19-4-3?14:44
          ?*/
          @EqualsAndHashCode(callSuper?=?true)
          @Data
          public?class?TableHeaderExcelProperty?extends?BaseRowModel?{

          ????/**
          ?????*?value:?表頭名稱
          ?????*?index:?列的號,?0表示第一列
          ?????*/
          ????@ExcelProperty(value?=?"姓名",?index?=?0)
          ????private?String?name;

          ????@ExcelProperty(value?=?"年齡",index?=?1)
          ????private?int?age;

          ????@ExcelProperty(value?=?"學(xué)校",index?=?2)
          ????private?String?school;
          }


          2、調(diào)用方法

          String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ArrayList?data?=?new?ArrayList<>();
          ??for(int?i?=?0;?i???????TableHeaderExcelProperty?tableHeaderExcelProperty?=?new?TableHeaderExcelProperty();
          ??????tableHeaderExcelProperty.setName("cmj"?+?i);
          ??????tableHeaderExcelProperty.setAge(22?+?i);
          ??????tableHeaderExcelProperty.setSchool("清華大學(xué)"?+?i);
          ??????data.add(tableHeaderExcelProperty);
          ??}

          ??ExcelUtil.writeWithTemplate(filePath,data);

          多個Sheet導(dǎo)出

          1、定義好模型對象

          package?com.springboot.utils.excel.test;

          import?com.alibaba.excel.annotation.ExcelProperty;
          import?com.alibaba.excel.metadata.BaseRowModel;
          import?lombok.Data;
          import?lombok.EqualsAndHashCode;

          /**
          ?*?@description:
          ?*?@author:?chenmingjian
          ?*?@date:?19-4-3?14:44
          ?*/
          @EqualsAndHashCode(callSuper?=?true)
          @Data
          public?class?TableHeaderExcelProperty?extends?BaseRowModel?{

          ????/**
          ?????*?value:?表頭名稱
          ?????*?index:?列的號,?0表示第一列
          ?????*/
          ????@ExcelProperty(value?=?"姓名",?index?=?0)
          ????private?String?name;

          ????@ExcelProperty(value?=?"年齡",index?=?1)
          ????private?int?age;

          ????@ExcelProperty(value?=?"學(xué)校",index?=?2)
          ????private?String?school;
          }


          2、調(diào)用方法

          ?ArrayList?list1?=?new?ArrayList<>();
          ?for(int?j?=?1;?j???????ArrayList?list?=?new?ArrayList<>();
          ??????for(int?i?=?0;?i???????????TableHeaderExcelProperty?tableHeaderExcelProperty?=?new?TableHeaderExcelProperty();
          ??????????tableHeaderExcelProperty.setName("cmj"?+?i);
          ??????????tableHeaderExcelProperty.setAge(22?+?i);
          ??????????tableHeaderExcelProperty.setSchool("清華大學(xué)"?+?i);
          ??????????list.add(tableHeaderExcelProperty);
          ??????}

          ??????Sheet?sheet?=?new?Sheet(j,?0);
          ??????sheet.setSheetName("sheet"?+?j);

          ??????ExcelUtil.MultipleSheelPropety?multipleSheelPropety?=?new?ExcelUtil.MultipleSheelPropety();
          ??????multipleSheelPropety.setData(list);
          ??????multipleSheelPropety.setSheet(sheet);

          ??????list1.add(multipleSheelPropety);

          ??}

          ??ExcelUtil.writeWithMultipleSheel("/home/chenmingjian/Downloads/aaa.xlsx",list1);

          工具類

          package?com.springboot.utils.excel;

          import?com.alibaba.excel.EasyExcelFactory;
          import?com.alibaba.excel.ExcelWriter;
          import?com.alibaba.excel.context.AnalysisContext;
          import?com.alibaba.excel.event.AnalysisEventListener;
          import?com.alibaba.excel.metadata.BaseRowModel;
          import?com.alibaba.excel.metadata.Sheet;
          import?lombok.Data;
          import?lombok.Getter;
          import?lombok.Setter;
          import?lombok.extern.slf4j.Slf4j;
          import?org.springframework.util.CollectionUtils;
          import?org.springframework.util.StringUtils;

          import?java.io.*;
          import?java.util.ArrayList;
          import?java.util.Collections;
          import?java.util.List;

          /**
          ?*?@description:
          ?*?@author:?chenmingjian
          ?*?@date:?19-3-18?16:16
          ?*/
          @Slf4j
          public?class?ExcelUtil?{

          ???private?static?Sheet?initSheet;

          ???static?{
          ??????initSheet?=?new?Sheet(1,?0);
          ??????initSheet.setSheetName("sheet");
          ??????//設(shè)置自適應(yīng)寬度
          ??????initSheet.setAutoWidth(Boolean.TRUE);
          ???}

          ???/**
          ????*?讀取少于1000行數(shù)據(jù)
          ????*?@param?filePath?文件絕對路徑
          ????*?@return
          ????*/
          ???public?static?List?readLessThan1000Row(String?filePath){
          ??????return?readLessThan1000RowBySheet(filePath,null);
          ???}

          ???/**
          ????*?讀小于1000行數(shù)據(jù),?帶樣式
          ????*?filePath?文件絕對路徑
          ????*?initSheet?:
          ????*??????sheetNo:?sheet頁碼,默認為1
          ????*??????headLineMun:?從第幾行開始讀取數(shù)據(jù),默認為0,?表示從第一行開始讀取
          ????*??????clazz:?返回數(shù)據(jù)List?中Object的類名
          ????*/
          ???public?static?List?readLessThan1000RowBySheet(String?filePath,?Sheet?sheet){
          ??????if(!StringUtils.hasText(filePath)){
          ?????????return?null;
          ??????}

          ??????sheet?=?sheet?!=?null???sheet?:?initSheet;

          ??????InputStream?fileStream?=?null;
          ??????try?{
          ?????????fileStream?=?new?FileInputStream(filePath);
          ?????????return?EasyExcelFactory.read(fileStream,?sheet);
          ??????}?catch?(FileNotFoundException?e)?{
          ?????????log.info("找不到文件或文件路徑錯誤,?文件:{}",?filePath);
          ??????}finally?{
          ?????????try?{
          ????????????if(fileStream?!=?null){
          ???????????????fileStream.close();
          ????????????}
          ?????????}?catch?(IOException?e)?{
          ????????????log.info("excel文件讀取失敗,?失敗原因:{}",?e);
          ?????????}
          ??????}
          ??????return?null;
          ???}

          ???/**
          ????*?讀大于1000行數(shù)據(jù)
          ????*?@param?filePath?文件覺得路徑
          ????*?@return
          ????*/
          ???public?static?List?readMoreThan1000Row(String?filePath){
          ??????return?readMoreThan1000RowBySheet(filePath,null);
          ???}

          ???/**
          ????*?讀大于1000行數(shù)據(jù),?帶樣式
          ????*?@param?filePath?文件覺得路徑
          ????*?@return
          ????*/
          ???public?static?List?readMoreThan1000RowBySheet(String?filePath,?Sheet?sheet){
          ??????if(!StringUtils.hasText(filePath)){
          ?????????return?null;
          ??????}

          ??????sheet?=?sheet?!=?null???sheet?:?initSheet;

          ??????InputStream?fileStream?=?null;
          ??????try?{
          ?????????fileStream?=?new?FileInputStream(filePath);
          ?????????ExcelListener?excelListener?=?new?ExcelListener();
          ?????????EasyExcelFactory.readBySax(fileStream,?sheet,?excelListener);
          ?????????return?excelListener.getDatas();
          ??????}?catch?(FileNotFoundException?e)?{
          ?????????log.error("找不到文件或文件路徑錯誤,?文件:{}",?filePath);
          ??????}finally?{
          ?????????try?{
          ????????????if(fileStream?!=?null){
          ???????????????fileStream.close();
          ????????????}
          ?????????}?catch?(IOException?e)?{
          ????????????log.error("excel文件讀取失敗,?失敗原因:{}",?e);
          ?????????}
          ??????}
          ??????return?null;
          ???}

          ???/**
          ????*?生成excle
          ????*?@param?filePath??絕對路徑,?如:/home/chenmingjian/Downloads/aaa.xlsx
          ????*?@param?data?數(shù)據(jù)源
          ????*?@param?head?表頭
          ????*/
          ???public?static?void?writeBySimple(String?filePath,?List>?data,?List?head){
          ??????writeSimpleBySheet(filePath,data,head,null);
          ???}

          ???/**
          ????*?生成excle
          ????*?@param?filePath?絕對路徑,?如:/home/chenmingjian/Downloads/aaa.xlsx
          ????*?@param?data?數(shù)據(jù)源
          ????*?@param?sheet?excle頁面樣式
          ????*?@param?head?表頭
          ????*/
          ???public?static?void?writeSimpleBySheet(String?filePath,?List>?data,?List?head,?Sheet?sheet){
          ??????sheet?=?(sheet?!=?null)???sheet?:?initSheet;

          ??????if(head?!=?null){
          ?????????List>?list?=?new?ArrayList<>();
          ?????????head.forEach(h?->?list.add(Collections.singletonList(h)));
          ?????????sheet.setHead(list);
          ??????}

          ??????OutputStream?outputStream?=?null;
          ??????ExcelWriter?writer?=?null;
          ??????try?{
          ?????????outputStream?=?new?FileOutputStream(filePath);
          ?????????writer?=?EasyExcelFactory.getWriter(outputStream);
          ?????????writer.write1(data,sheet);
          ??????}?catch?(FileNotFoundException?e)?{
          ?????????log.error("找不到文件或文件路徑錯誤,?文件:{}",?filePath);
          ??????}finally?{
          ?????????try?{
          ????????????if(writer?!=?null){
          ???????????????writer.finish();
          ????????????}

          ????????????if(outputStream?!=?null){
          ???????????????outputStream.close();
          ????????????}

          ?????????}?catch?(IOException?e)?{
          ????????????log.error("excel文件導(dǎo)出失敗,?失敗原因:{}",?e);
          ?????????}
          ??????}

          ???}

          ???/**
          ????*?生成excle
          ????*?@param?filePath?絕對路徑,?如:/home/chenmingjian/Downloads/aaa.xlsx
          ????*?@param?data?數(shù)據(jù)源
          ????*/
          ???public?static?void?writeWithTemplate(String?filePath,?List?data){
          ??????writeWithTemplateAndSheet(filePath,data,null);
          ???}

          ???/**
          ????*?生成excle
          ????*?@param?filePath?絕對路徑,?如:/home/chenmingjian/Downloads/aaa.xlsx
          ????*?@param?data?數(shù)據(jù)源
          ????*?@param?sheet?excle頁面樣式
          ????*/
          ???public?static?void?writeWithTemplateAndSheet(String?filePath,?List?data,?Sheet?sheet){
          ??????if(CollectionUtils.isEmpty(data)){
          ?????????return;
          ??????}

          ??????sheet?=?(sheet?!=?null)???sheet?:?initSheet;
          ??????sheet.setClazz(data.get(0).getClass());

          ??????OutputStream?outputStream?=?null;
          ??????ExcelWriter?writer?=?null;
          ??????try?{
          ?????????outputStream?=?new?FileOutputStream(filePath);
          ?????????writer?=?EasyExcelFactory.getWriter(outputStream);
          ?????????writer.write(data,sheet);
          ??????}?catch?(FileNotFoundException?e)?{
          ?????????log.error("找不到文件或文件路徑錯誤,?文件:{}",?filePath);
          ??????}finally?{
          ?????????try?{
          ????????????if(writer?!=?null){
          ???????????????writer.finish();
          ????????????}

          ????????????if(outputStream?!=?null){
          ???????????????outputStream.close();
          ????????????}
          ?????????}?catch?(IOException?e)?{
          ????????????log.error("excel文件導(dǎo)出失敗,?失敗原因:{}",?e);
          ?????????}
          ??????}

          ???}

          ???/**
          ????*?生成多Sheet的excle
          ????*?@param?filePath?絕對路徑,?如:/home/chenmingjian/Downloads/aaa.xlsx
          ????*?@param?multipleSheelPropetys
          ????*/
          ???public?static?void?writeWithMultipleSheel(String?filePath,List?multipleSheelPropetys){
          ??????if(CollectionUtils.isEmpty(multipleSheelPropetys)){
          ?????????return;
          ??????}

          ??????OutputStream?outputStream?=?null;
          ??????ExcelWriter?writer?=?null;
          ??????try?{
          ?????????outputStream?=?new?FileOutputStream(filePath);
          ?????????writer?=?EasyExcelFactory.getWriter(outputStream);
          ?????????for?(MultipleSheelPropety?multipleSheelPropety?:?multipleSheelPropetys)?{
          ????????????Sheet?sheet?=?multipleSheelPropety.getSheet()?!=?null???multipleSheelPropety.getSheet()?:?initSheet;
          ????????????if(!CollectionUtils.isEmpty(multipleSheelPropety.getData())){
          ???????????????sheet.setClazz(multipleSheelPropety.getData().get(0).getClass());
          ????????????}
          ????????????writer.write(multipleSheelPropety.getData(),?sheet);
          ?????????}

          ??????}?catch?(FileNotFoundException?e)?{
          ?????????log.error("找不到文件或文件路徑錯誤,?文件:{}",?filePath);
          ??????}finally?{
          ?????????try?{
          ????????????if(writer?!=?null){
          ???????????????writer.finish();
          ????????????}

          ????????????if(outputStream?!=?null){
          ???????????????outputStream.close();
          ????????????}
          ?????????}?catch?(IOException?e)?{
          ????????????log.error("excel文件導(dǎo)出失敗,?失敗原因:{}",?e);
          ?????????}
          ??????}

          ???}


          ???/*********************匿名內(nèi)部類開始,可以提取出去******************************/

          ???@Data
          ???public?static?class?MultipleSheelPropety{

          ??????private?List?data;

          ??????private?Sheet?sheet;
          ???}

          ???/**
          ????*?解析監(jiān)聽器,
          ????*?每解析一行會回調(diào)invoke()方法。
          ????*?整個excel解析結(jié)束會執(zhí)行doAfterAllAnalysed()方法
          ????*
          ????*?@author:?chenmingjian
          ????*?@date:?19-4-3?14:11
          ????*/
          ???@Getter
          ???@Setter
          ???public?static?class?ExcelListener?extends?AnalysisEventListener?{

          ??????private?List?datas?=?new?ArrayList<>();

          ??????/**
          ???????*?逐行解析
          ???????*?object?:?當(dāng)前行的數(shù)據(jù)
          ???????*/
          ??????@Override
          ??????public?void?invoke(Object?object,?AnalysisContext?context)?{
          ?????????//當(dāng)前行
          ?????????//?context.getCurrentRowNum()
          ?????????if?(object?!=?null)?{
          ????????????datas.add(object);
          ?????????}
          ??????}


          ??????/**
          ???????*?解析完所有數(shù)據(jù)后會調(diào)用該方法
          ???????*/
          ??????@Override
          ??????public?void?doAfterAllAnalysed(AnalysisContext?context)?{
          ?????????//解析結(jié)束銷毀不用的資源
          ??????}

          ???}

          ???/************************匿名內(nèi)部類結(jié)束,可以提取出去***************************/

          }


          測試類

          package?com.springboot.utils.excel;

          import?com.alibaba.excel.annotation.ExcelProperty;
          import?com.alibaba.excel.metadata.BaseRowModel;
          import?com.alibaba.excel.metadata.Sheet;
          import?lombok.Data;
          import?lombok.EqualsAndHashCode;
          import?org.junit.runner.RunWith;
          import?org.springframework.boot.test.context.SpringBootTest;
          import?org.springframework.test.context.junit4.SpringRunner;

          import?java.util.ArrayList;
          import?java.util.Arrays;
          import?java.util.List;

          /**
          ?*?@description:?測試類
          ?*?@author:?chenmingjian
          ?*?@date:?19-4-4?15:24
          ?*/
          @SpringBootTest
          @RunWith(SpringRunner.class)
          public?class?Test?{

          ????/**
          ?????*?讀取少于1000行的excle
          ?????*/
          [email protected]
          ????public?void?readLessThan1000Row(){
          ????????String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ????????List?objects?=?ExcelUtil.readLessThan1000Row(filePath);
          ????????objects.forEach(System.out::println);
          ????}

          ????/**
          ?????*?讀取少于1000行的excle,可以指定sheet和從幾行讀起
          ?????*/
          [email protected]
          ????public?void?readLessThan1000RowBySheet(){
          ????????String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ????????Sheet?sheet?=?new?Sheet(1,?1);
          ????????List?objects?=?ExcelUtil.readLessThan1000RowBySheet(filePath,sheet);
          ????????objects.forEach(System.out::println);
          ????}

          ????/**
          ?????*?讀取大于1000行的excle
          ?????*?帶sheet參數(shù)的方法可參照測試方法readLessThan1000RowBySheet()
          ?????*/
          [email protected]
          ????public?void?readMoreThan1000Row(){
          ????????String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ????????List?objects?=?ExcelUtil.readMoreThan1000Row(filePath);
          ????????objects.forEach(System.out::println);
          ????}


          ????/**
          ?????*?生成excle
          ?????*?帶sheet參數(shù)的方法可參照測試方法readLessThan1000RowBySheet()
          ?????*/
          [email protected]
          ????public?void?writeBySimple(){
          ????????String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ????????List>?data?=?new?ArrayList<>();
          ????????data.add(Arrays.asList("111","222","333"));
          ????????data.add(Arrays.asList("111","222","333"));
          ????????data.add(Arrays.asList("111","222","333"));
          ????????List?head?=?Arrays.asList("表頭1",?"表頭2",?"表頭3");
          ????????ExcelUtil.writeBySimple(filePath,data,head);
          ????}


          ????/**
          ?????*?生成excle,?帶用模型
          ?????*?帶sheet參數(shù)的方法可參照測試方法readLessThan1000RowBySheet()
          ?????*/
          [email protected]
          ????public?void?writeWithTemplate(){
          ????????String?filePath?=?"/home/chenmingjian/Downloads/測試.xlsx";
          ????????ArrayList?data?=?new?ArrayList<>();
          ????????for(int?i?=?0;?i?????????????TableHeaderExcelProperty?tableHeaderExcelProperty?=?new?TableHeaderExcelProperty();
          ????????????tableHeaderExcelProperty.setName("cmj"?+?i);
          ????????????tableHeaderExcelProperty.setAge(22?+?i);
          ????????????tableHeaderExcelProperty.setSchool("清華大學(xué)"?+?i);
          ????????????data.add(tableHeaderExcelProperty);
          ????????}
          ????????ExcelUtil.writeWithTemplate(filePath,data);
          ????}


          ????/**
          ?????*?生成excle,?帶用模型,帶多個sheet
          ?????*/
          [email protected]
          ????public?void?writeWithMultipleSheel(){
          ????????ArrayList?list1?=?new?ArrayList<>();
          ????????for(int?j?=?1;?j?????????????ArrayList?list?=?new?ArrayList<>();
          ????????????for(int?i?=?0;?i?????????????????TableHeaderExcelProperty?tableHeaderExcelProperty?=?new?TableHeaderExcelProperty();
          ????????????????tableHeaderExcelProperty.setName("cmj"?+?i);
          ????????????????tableHeaderExcelProperty.setAge(22?+?i);
          ????????????????tableHeaderExcelProperty.setSchool("清華大學(xué)"?+?i);
          ????????????????list.add(tableHeaderExcelProperty);
          ????????????}

          ????????????Sheet?sheet?=?new?Sheet(j,?0);
          ????????????sheet.setSheetName("sheet"?+?j);

          ????????????ExcelUtil.MultipleSheelPropety?multipleSheelPropety?=?new?ExcelUtil.MultipleSheelPropety();
          ????????????multipleSheelPropety.setData(list);
          ????????????multipleSheelPropety.setSheet(sheet);

          ????????????list1.add(multipleSheelPropety);

          ????????}

          ????????ExcelUtil.writeWithMultipleSheel("/home/chenmingjian/Downloads/aaa.xlsx",list1);

          ????}


          ????/*******************匿名內(nèi)部類,實際開發(fā)中該對象要提取出去**********************/
          ????
          ????
          ????/**
          ?????*?@description:
          ?????*?@author:?chenmingjian
          ?????*?@date:?19-4-3?14:44
          ?????*/
          ????@EqualsAndHashCode(callSuper?=?true)
          ????@Data
          ????public?static?class?TableHeaderExcelProperty?extends?BaseRowModel?{

          ????????/**
          ?????????*?value:?表頭名稱
          ?????????*?index:?列的號,?0表示第一列
          ?????????*/
          ????????@ExcelProperty(value?=?"姓名",?index?=?0)
          ????????private?String?name;

          ????????@ExcelProperty(value?=?"年齡",index?=?1)
          ????????private?int?age;

          ????????@ExcelProperty(value?=?"學(xué)校",index?=?2)
          ????????private?String?school;
          ????}

          ????/*******************匿名內(nèi)部類,實際開發(fā)中該對象要提取出去**********************/

          }



          ? 作者?|??沖奶粉的奶爸

          來源 |??csdn.net/qq_32258777/article/details/89031479


          加鋒哥微信:?java1239??
          圍觀鋒哥朋友圈,每天推送Java干貨!

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    日韩国产精品毛片 | 国产美女做爱A片是免费 | 丁香五月AV | 欧美一级片日韩一级片 | 激情动态图欧美 |