什麼是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>