讀者群裡有個小夥伴感慨說,“Hutool 這款開源類庫太厲害了,基本上該有該的工具類,它裡面都有。”講真的,我平常工作中也經常用 Hutool,它确實可以幫助我們簡化每一行代碼,使 Java 擁有函數式語言般的優雅,讓 Java 語言變得“甜甜的”。
PS:為了能夠幫助更多的 Java 愛好者,已将《Java 程式員進階之路》開源到了 GitHub(本篇已收錄)。該專欄目前已經收獲了 598 枚星标,如果你也喜歡這個專欄,覺得有幫助的話,可以去點個 star,這樣也友善以後進行更系統化的學習!
https://github.com/itwanger/toBeBetterJavaerHutool 的作者在官網上說,Hutool 是 Hu+tool 的自造詞(好像不用說,我們也能猜得到),“Hu”用來緻敬他的“前任”公司,“tool”就是工具的意思,諧音就有意思了,“糊塗”,寓意追求“萬事都作糊塗觀,無所謂失,無所謂得”(一個開源類庫,上升到了哲學的高度,作者厲害了)。
看了一下開發團隊的一個成員介紹,一個 Java 後端工具的作者竟然愛前端、愛數位,愛美女,嗯嗯嗯,确實“難得糊塗”(手動狗頭)。
廢話就說到這,來吧,實操走起!
01、引入 Hutool
Maven 項目隻需要在 pom.xml 檔案中添加以下依賴即可。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.3</version>
</dependency>
Hutool 的設計思想是盡量減少重複的定義,讓項目中的 util 包盡量少。一個好的輪子可以在很大程度上避免“複制粘貼”,進而節省我們開發人員對項目中公用類庫和公用工具方法的封裝時間。同時呢,成熟的開源庫也可以最大限度的避免封裝不完善帶來的 bug。
就像作者在官網上說的那樣:
以前,我們打開搜尋引擎 -> 搜“Java MD5 加密” -> 打開某篇部落格 -> 複制粘貼 -> 改改,變得好用些
有了 Hutool 以後呢,引入 Hutool -> 直接 SecureUtil.md5()
Hutool 對不僅對 JDK 底層的檔案、流、加密解密、轉碼、正則、線程、XML等做了封裝,還提供了以下這些元件:

非常多,非常全面,鑒于此,我隻挑選一些我喜歡的來介紹下(偷偷地告訴你,我就是想偷懶)。
02、類型轉換
類型轉換在 Java 開發中很常見,尤其是從 HttpRequest 中擷取參數的時候,前端傳遞的是整形,但後端隻能先擷取到字元串,然後再調用 parseXXX() 方法進行轉換,還要加上判空,很繁瑣。
Hutool 的 Convert 類可以簡化這個操作,可以将任意可能的類型轉換為指定類型,同時第二個參數 defaultValue 可用于在轉換失敗時傳回一個預設值。
String param = "10";
int paramInt = Convert.toInt(param);
int paramIntDefault = Convert.toInt(param, 0);
把字元串轉換成日期:
String dateStr = "2020年09月29日";
Date date = Convert.toDate(dateStr);
把字元串轉成 Unicode:
String unicodeStr = "沉默王二";
String unicode = Convert.strToUnicode(unicodeStr);
03、日期時間
JDK 自帶的 Date 和 Calendar 不太好用,Hutool 封裝的 DateUtil 用起來就舒服多了!
擷取目前日期:
Date date = DateUtil.date();
DateUtil.date() 傳回的其實是 DateTime,它繼承自 Date 對象,重寫了 toString() 方法,傳回 yyyy-MM-dd HH:mm:ss 格式的字元串。
有些小夥伴是不是想看看我寫這篇文章的時間,輸出一下給大家看看:
System.out.println(date);// 2020-09-29 04:28:02
字元串轉日期:
String dateStr = "2020-09-29";
Date date = DateUtil.parse(dateStr);
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 dateStr1 = "2020-09-29 22:33:23";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2020-10-01 23:34:27";
Date date2 = DateUtil.parse(dateStr2);
long betweenDay = DateUtil.between(date1, date2, DateUnit.MS);
// 輸出:2天1小時1分4秒
String formatBetween = DateUtil.formatBetween(betweenDay, BetweenFormater.Level.SECOND);
星座和屬相:
// 射手座
String zodiac = DateUtil.getZodiac(Month.DECEMBER.getValue(), 10);
// 蛇
String chineseZodiac = DateUtil.getChineseZodiac(1989);
04、IO 流相關
IO 操作包括讀和寫,應用的場景主要包括網絡操作和檔案操作,原生的 Java 類庫區分字元流和位元組流,位元組流 InputStream 和 OutputStream 就有很多很多種,使用起來讓人頭皮發麻。
Hutool 封裝了流操作工具類 IoUtil、檔案讀寫操作工具類 FileUtil、檔案類型判斷工具類 FileTypeUtil 等等。
BufferedInputStream in = FileUtil.getInputStream("hutool/origin.txt");
BufferedOutputStream out = FileUtil.getOutputStream("hutool/to.txt");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);
在 IO 操作中,檔案的操作相對來說是比較複雜的,但使用頻率也很高,幾乎所有的項目中都躺着一個叫 FileUtil 或者 FileUtils 的工具類。Hutool 的 FileUtil 類包含以下幾類操作:
檔案操作:包括檔案目錄的建立、删除、複制、移動、改名等
檔案判斷:判斷檔案或目錄是否非空,是否為目錄,是否為檔案等等
絕對路徑:針對 ClassPath 中的檔案轉換為絕對路徑檔案
檔案名:主檔案名,擴充名的擷取
讀操作:包括 getReader、readXXX 操作
寫操作:包括 getWriter、writeXXX 操作