<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      「Java工具類」EasyExcelUtil工具類 excel導入導出工具類 阿里EasyExcel簡單封裝新版強大不再需要poi

      介紹語

      本號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!

      望各位碼友點擊關注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊

      如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。

      正文:

      excel導入導出工具類,今天整理出來了,看了下項目中用的居然還是1.x版本,整理時升級到easyexcel 3.0.2最新版本,沒想到之前封裝的一堆代碼都不需要,現在這個版本太好用了。大家可以直接使用easyexcel的方法,封裝多一層是為了項目更方便使用而已。

      例子1

      讀測試

      @Test
       public void readTest(){
           // 讀取測試
           String readFile = "D:\\Workspace\\IdeaProjects\\jtool-common\\student信息表2.xlsx";
           List<Student> data = EasyExcelUtil.read(readFile, Student.class);
           printList(data);
       }
       private static void printList(List<?> datas) {
           int i = 0;
           for (Object ob : datas) {
               System.out.println(i++ + "=>" + ob);
           }
       }
       ?
       // 控制臺打印
       17:55:58.240 [main] INFO  - 解析完成!讀取10行
       0=>Student(name=張1, age=12, address=深圳0棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       1=>Student(name=張1, age=13, address=深圳1棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       2=>Student(name=張1, age=14, address=深圳2棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       3=>Student(name=張1, age=15, address=深圳3棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       4=>Student(name=張1, age=16, address=深圳4棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       5=>Student(name=張1, age=17, address=深圳5棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       6=>Student(name=張1, age=18, address=深圳6棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       7=>Student(name=張1, age=19, address=深圳7棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       8=>Student(name=張1, age=20, address=深圳8棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)
       9=>Student(name=張1, age=21, address=深圳9棟大樓, birthday=Wed Nov 03 12:17:46 GMT+08:00 2021)

      例子2

      寫測試

      @Test
       public void writeTest(){
           // 寫入測試
           List<Student> stus = new ArrayList<>();
           for (int i = 0; i < 10; i++) {
               stus.add(new Student("張1", 12 + i, "深圳" + i + "棟大樓", new Date()));
           }
           String file = "student信息表2.xlsx";
           EasyExcelUtil.write(file, stus);
       }
       ?
       // 控制臺無輸出,可以在工程跟目錄找到導出的文件student信息表2.xlsx

      例子3

      直接返回給瀏覽器下載

      @RequestMapping(value = "/download", method = RequestMethod.GET)
       public String download(HttpServletRequest request, HttpServletResponse response) throws IOException {
       ?
           // 寫入測試
           List<Student> stus = new ArrayList<>();
           for (int i = 0; i < 10; i++) {
               stus.add(new Student("張1", 12 + i, "深圳" + i + "棟大樓", new Date()));
           }
           EasyExcelUtil.download(response, stus, "學生信息表");
           return "";
       }

      例子2和例子3導出的文件內容:

      工具類源碼:

      import com.alibaba.excel.EasyExcel;
       import org.slf4j.Logger;
       import org.slf4j.LoggerFactory;
       ?
       import javax.servlet.http.HttpServletResponse;
       import java.io.*;
       import java.net.URLEncoder;
       import java.util.List;
       ?
       /**
        * excel工具類
        * easyexcel使用的3.0.2版本,跟以前版本有很大區別,且不兼容1.x版本
        *
        * @author liangxn
        */
       public class EasyExcelUtil {
       ?
           private static final Logger LOGGER = LoggerFactory.getLogger(EasyExcelUtil.class);
       ?
           public static <T> List<T> read(String filePath, final Class<?> clazz) {
               File f = new File(filePath);
               try (FileInputStream fis = new FileInputStream(f)) {
                   return read(fis, clazz);
               } catch (FileNotFoundException e) {
                   LOGGER.error("文件{}不存在", filePath, e);
               } catch (IOException e) {
                   LOGGER.error("文件讀取出錯", e);
               }
       ?
               return null;
           }
       ?
           public static <T> List<T> read(InputStream inputStream, final Class<?> clazz) {
               if (inputStream == null) {
                   throw new MyAppRunException("解析出錯了,文件流是null");
               }
       ?
               // 有個很重要的點 DataListener 不能被spring管理,要每次讀取excel都要new,然后里面用到spring可以構造方法傳進去
               DataListener<T> listener = new DataListener<>();
       ?
               // 這里 需要指定讀用哪個class去讀,然后讀取第一個sheet 文件流會自動關閉
               EasyExcel.read(inputStream, clazz, listener).sheet().doRead();
               return listener.getRows();
           }
       ?
           public static void write(String outFile, List<?> list) {
               Class<?> clazz = list.get(0).getClass();
               // 新版本會自動關閉流,不需要自己操作
               EasyExcel.write(outFile, clazz).sheet().doWrite(list);
           }
       ?
           public static void write(String outFile, List<?> list, String sheetName) {
               Class<?> clazz = list.get(0).getClass();
               // 新版本會自動關閉流,不需要自己操作
               EasyExcel.write(outFile, clazz).sheet(sheetName).doWrite(list);
           }
       ?
           public static void write(OutputStream outputStream, List<?> list, String sheetName) {
               Class<?> clazz = list.get(0).getClass();
               // 新版本會自動關閉流,不需要自己操作
               // sheetName為sheet的名字,默認寫第一個sheet
               EasyExcel.write(outputStream, clazz).sheet(sheetName).doWrite(list);
           }
       ?
           /**
            * 文件下載(失敗了會返回一個有部分數據的Excel),用于直接把excel返回到瀏覽器下載
            */
           public static void download(HttpServletResponse response, List<?> list, String sheetName) throws IOException {
               Class<?> clazz = list.get(0).getClass();
       ?
               // 這里注意 有同學反應使用swagger 會導致各種問題,請直接用瀏覽器或者用postman
               response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
               response.setCharacterEncoding("utf-8");
               // 這里URLEncoder.encode可以防止中文亂碼 當然和easyexcel沒有關系
               String fileName = URLEncoder.encode(sheetName, "UTF-8").replaceAll("\\+", "%20");
               response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
               EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);
           }
       ?
       }

      相關的其它類

      import com.alibaba.excel.context.AnalysisContext;
      import com.alibaba.excel.event.AnalysisEventListener;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * excel解析過程監聽器
       *
       * @author liangxn
       */
      public class DataListener<T> extends AnalysisEventListener<T> {
      
          private static final Logger LOGGER = LoggerFactory.getLogger(DataListener.class);
      
          private final List<T> rows = new ArrayList<>();
      
          @Override
          public void invoke(T t, AnalysisContext analysisContext) {
              rows.add(t);
          }
      
          @Override
          public void doAfterAllAnalysed(AnalysisContext context) {
              LOGGER.info("解析完成!讀取{}行", rows.size());
          }
      
          public List<T> getRows() {
              return rows;
          }
      }
      
      
       import com.alibaba.excel.annotation.ExcelProperty;
       import com.alibaba.excel.annotation.format.DateTimeFormat;
       import lombok.AllArgsConstructor;
       import lombok.Data;
       import lombok.NoArgsConstructor;
       ?
       import java.util.Date;
       ?
       @Data
       @AllArgsConstructor
       @NoArgsConstructor
       public class Student {
           @ExcelProperty(value = "姓名", index = 0)
           private String name;
       ?
           @ExcelProperty(value = "年齡", index = 1)
           private int age;
       ?
           @ExcelProperty(value = "地址", index = 2)
           private String address;
       ?
           // easyexcel日期類型不支持LocalDate,只能是Date
           @ExcelProperty(value = "生日", index = 3)
           @DateTimeFormat("yyyy-MM-dd")
           private Date birthday;
       }
      
      
       /**
        * 通用異常類
        */
       public class MyAppRunException extends RuntimeException {
       ?
           public MyAppRunException(String message) {
               super(message);
           }
       ?
           public MyAppRunException(String message, Throwable cause) {
               super(message, cause);
           }
       ?
           public MyAppRunException(Throwable cause) {
               super(cause);
           }
       ?
           protected MyAppRunException(String message,
                   Throwable cause,
                   boolean enableSuppression,
                   boolean writableStackTrace) {
               super(message, cause, enableSuppression, writableStackTrace);
           }
       ?
       }

      鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。

      計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

      posted @ 2021-11-03 18:20  Java夜未眠  閱讀(718)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品亚洲mnbav网站| 鲜城| 久久99日本免费国产精品| 扎兰屯市| 亚洲人成小说网站色在线| 天天做天天爱夜夜爽导航| 国产影片AV级毛片特别刺激 | 成人精品色一区二区三区| 亚洲 制服 丝袜 无码| 国产网友愉拍精品视频手机| 国产精品女人毛片在线看| 久久无码中文字幕免费影院| 国产精品亚洲中文字幕| 草草浮力影院| 精品国产成人三级在线观看| 99久久婷婷国产综合精品青草漫画| 澄江县| 午夜在线欧美蜜桃| 国产成a人片在线观看视频下载| 亚洲一区在线观看青青蜜臀| 亚洲 一区二区 在线| 无码熟妇人妻av影音先锋| 天天摸夜夜摸夜夜狠狠添| 国产精品自在欧美一区| 在线 欧美 中文 亚洲 精品| 亚洲欧美精品综合在线观看| 日韩一区二区三区亚洲一| 日韩精品国产二区三区| 成在人线AV无码免观看| 亚洲精品一区二区三区大| 亚洲女人天堂| 最新国产精品亚洲| 激情综合五月丁香亚洲| 亚洲AV成人片在线观看| 久久国产热这里只有精品| 巨胸美乳无码人妻视频漫画| 亚洲最大成人在线播放| 色老99久久精品偷偷鲁| 97午夜理论电影影院| 亚洲国产精品一二三区| 一区二区三区四区自拍偷拍 |