強大的Java輔助類工具箱Hutool

原文鏈接:https://blog.csdn.net/moshowgame/article/details/80087954

什麼是Hutool

Hutool是一個Java工具包,也就是一個工具箱,一個utils集合,它幫助我們簡化每一行代碼,減少每一個方法,讓Java語言也可以簡單粗暴。Hutool最初是作者項目中“util”包的一個整理,後來慢慢積累並加入更多非業務相關功能,並廣泛學習其它開源項目精髓,經過自己整理修改,最終形成豐富的開源工具集。

Hutool功能

一個Java基礎工具類,對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝,組成各種Util工具類,同時提供以下組件:

hutool-aop JDK動態代理封裝,提供非IOC下的切面支持
hutool-bloomFilter 布隆過濾,提供一些Hash算法的布隆過濾
hutool-cache 緩存
hutool-core 核心,包括Bean操作、日期、各種Util等
hutool-cron 定時任務模塊,提供類Crontab表達式的定時任務
hutool-crypto 加密解密模塊
hutool-db JDBC封裝後的數據操作,基於ActiveRecord思想
hutool-dfa 基於DFA模型的多關鍵字查找
hutool-extra 擴展模塊,對第三方封裝(模板引擎、郵件等)
hutool-http 基於HttpUrlConnection的Http客戶端封裝
hutool-log 自動識別日誌實現的日誌門面
hutool-script 腳本執行封裝,例如Javascript
hutool-setting 功能更強大的Setting配置文件和Properties封裝
hutool-system 系統參數調用封裝(JVM信息等)
hutool-json JSON實現
hutool-captcha 圖片驗證碼實現

Maven引入

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.19</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

實用方法推薦

具體的使用方法可以到hutool.mydoc.io去探索,這裏列舉幾個。

1、Http客戶端工具類-HttpUtil

//POST請求栗子:
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);

//文件上傳只需將參數中的鍵指定(默認file),值設爲文件對象即可,對於使用者來說,文件上傳與普通表單提交併無區別
paramMap.put(“file”, FileUtil.file(“D:\face.jpg”));
String result= HttpUtil.post(“https://www.baidu.com”, paramMap);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • HttpUtil.encode和HttpUtil.decode 兩個方法封裝了JDK的URLEncoder.encode和URLDecoder.decode方法,可以方便的對URL參數進行URL編碼和解碼。
  • HttpUtil.toParams和HttpUtil.decodeParams 兩個方法是將Map參數轉爲URL參數字符串和將URL參數字符串轉爲Map對象
  • HttpUtil.urlWithForm是將URL字符串和Map參數拼接爲GET請求所用的完整字符串使用

2、Bean工具-BeanUtil

基於BeanUtil.fillBean方法Hutool還提供了Map對象鍵值對注入Bean,其方法有:

  • BeanUtil.fillBeanWithMap
  • BeanUtil.fillBeanWithMapIgnoreCase

同時提供了map轉bean的方法,與fillBean不同的是,此處並不是傳Bean對象,而是Bean類,Hutool會自動調用默認構造方法創建對象。當然,前提是Bean類有默認構造方法(空構造),這些方法有:

  • BeanUtil.mapToBean

  • BeanUtil.mapToBeanIgnoreCase
    在Java Web應用中,我們經常需要將ServletRequest對象中的參數注入bean(http表單數據),BeanUtil類提供了兩個便捷方法:

  • BeanUtil.fillBeanWithRequestParam 將http表單數據注入Bean對象

  • BeanUtil.requestParamToBean 將http表單數據注入新建的Bean對象

Bean轉爲Map

  • BeanUtil.beanToMap方法則是將一個Bean對象轉爲Map對象。

Bean轉Bean

  • Bean之間的轉換主要是相同屬性的複製,因此方法名爲copyProperties。
  • BeanUtil.copyProperties方法同樣提供一個CopyOptions參數用於自定義屬性複製。

3、日期時間工具-DateUtil

DateUtil.parse方法會自動識別一些常用格式,包括:
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
  • 1
  • 2

我們也可以使用自定義日期格式轉化:

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
  • 1
  • 2

格式化日期輸出

String dateStr = "2018-05-01";
Date date = DateUtil.parse(dateStr);

//結果 2018/05/01
String format = DateUtil.format(date, “yyyy/MM/dd”);

//常用格式的格式化,結果:2018-05-01
String formatDate = DateUtil.formatDate(date);

//結果:2017-05-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);

//昨天
DateUtil.yesterday()
//明天
DateUtil.tomorrow()
//上週
DateUtil.lastWeek()
//下週
DateUtil.nextWeek()
//上個月
DateUtil.lastMonth()
//下個月
DateUtil.nextMonth()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

日期時間差

有時候我們需要計算兩個日期之間的時間差(相差天數、相差小時數等等),Hutool將此類方法封裝爲between方法:

String dateStr1 = "2017-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);

String dateStr2 = “2017-04-01 23:33:23”;
Date date2 = DateUtil.parse(dateStr2);

//相差一個月,31天
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
有時候我們希望看到易讀的時間差,比如XX天XX小時XX分XX秒,此時使用DateUtil.formatBetween方法:

//Level.MINUTE表示精確到分
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
//輸出:31天1小時
Console.log(formatBetween);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

其他時間

//年齡
DateUtil.ageOfNow("1990-01-30");

//是否閏年
DateUtil.isLeapYear(2017);

  • 1
  • 2
  • 3
  • 4
  • 5

4、XML工具-XmlUtil

在日常編碼中,我們接觸最多的除了JSON外,就是XML格式了,一般而言,我們首先想到的是引入Dom4j包,卻不知JDK已經封裝有XML解析和構建工具:w3c dom。但是由於這個API操作比較繁瑣,因此Hutool中提供了XmlUtil簡化XML的創建、讀和寫的過程。

讀取XML:

  • XmlUtil.readXML 讀取XML文件
  • XmlUtil.parseXml 解析XML字符串爲Document對象

寫XML:

  • XmlUtil.toStr 將XML文檔轉換爲String
  • XmlUtil.toFile 將XML文檔寫入到文件

節點讀取操作:

  • XmlUtil.cleanInvalid 除XML文本中的無效字符
  • XmlUtil.getElements 根據節點名獲得子節點列表
  • XmlUtil.getElement 根據節點名獲得第一個子節點
  • XmlUtil.elementText 根據節點名獲得第一個子節點
  • XmlUtil.transElements 將NodeList轉換爲Element列表

XML與對象轉換:

  • writeObjectAsXml 將可序列化的對象轉換爲XML寫入文件,已經存在的文件將被覆蓋。
  • readObjectFromXml 從XML中讀取對象。

5、ExcelUtil

  • 從文件中讀取Excel爲ExcelReader
ExcelReader reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"));
  • 1
  • 從流中讀取Excel爲ExcelReader(比如從ClassPath中讀取Excel文件)
ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("aaa.xlsx"));
  • 1

ExcelReader reader;

  • //通過sheet編號獲取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), 0);
  • 1
  • //通過sheet名獲取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), "sheet1");
  • 1
  • 讀取大數據量的Excel
private RowHandler createRowHandler() {
    return new RowHandler() {
        @Override
        public void handle(int sheetIndex, int rowIndex, List<Object> rowlist) {
            Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
        }
    };
}
 ExcelUtil.readBySax("aaa.xlsx", 0, createRowHandler());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

@@@好了,大概就是這樣。更具體的內容可以到官網和wiki去挖
http://www.hutool.cn/
http://hutool.mydoc.io

                                </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章