用了這個 Java 小工具,我廢了

我們在開發時,經常需要重複編寫很多和業務無關的程式碼,比如獲取指定日期物件、獲取本機 IP 地址、校驗身份證號、資料加密等。

通常我們會把這些程式碼獨立出來,放到 util 包下,作為 工具類 供其他程式碼呼叫。

相信每位 Java 開發者都自己寫(貼上)過工具類,寫的專案多了,日積月累,可能有的同學已經有了自己的工具類庫。但是,當需要用到新的工具類時,你會怎麼做呢?

比如老闆讓我做一個 MD5 加密的工具,可是我根本沒有學過加密演算法!

用了這個 Java 小工具,我廢了

於是我開啟某度搜索引擎,搜尋 “Java MD5加密演算法實現”,打開了某篇部落格(可能還要登入),再複製貼上,再去掉一些無用的註釋,再略加修改,得到工具類,放到自己的 util 目錄下。

這一套操作下來,十幾分鍾可能就過去了。而這個程式碼和我們的業務是完全無關的,就可能會耽誤一些專案的開發時間!

我們都喜歡白 piao,那麼有沒有現成的 util 工具包給我們用呢?來了來了,Hutool 工具庫!

Hutool 是什麼?

Hutool 是一個開源的 Java 工具包類庫,對檔案、流、加密解密、轉碼、正則、執行緒、XML 等 JDK 方法進行封裝,組成各種 Util 工具類。

用了這個 Java 小工具,我廢了

Hutool 官網:https://hutool。cn/

GitHub 地址:https://github。com/looly/hutool

為什麼用 Hutool?

Java 語言雖然自帶了很多的工具類,但是相對於 Scala 等高階語言來說,封裝的工具還不夠豐富和完善,遠遠不能滿足我們的需求。

因此,出現了各種各樣的第三方類庫,比如知名的 guava、apache-common-utils,雖然這些類庫的實現很優秀,但作為工具類庫來說,工具的種類還不夠多,通常我們還要搭配其他第三方類庫使用(比如操作 Excel 地庫 POI)。

而 Hutool 是一個小而全的 Java 工具類庫,有各種各樣的工具,基本可以滿足我們所有的業務訴求。

這也是為啥類庫取名 Hutool,Hutool 諧音“糊塗”,寓意追求 “萬事都作糊塗觀,無所謂失,無所謂得” 的境界。

Hutool 透過靜態方法封裝,能夠降低相關 API 的學習成本,提高工作效率,使 Java 擁有函式式語言般的優雅,讓 Java 語言也可以“甜甜的”。

有的同學可能會認為工具類自己實現就好了,幹嘛非要引入一個三方類庫呢?確實,如果你有能力,可以實現和建設自己的工具庫,但是自己實現難免會花很多的時間,或者實現的效能不夠高,甚至可能出現一些問題(比如資源忘記 close 導致洩露,魚皮就幹過)。

而 Hutool 中的工具方法來自於每個使用者的精雕細琢,作為一個開源專案,由很多大佬共同開發和完善,並經歷了上百個企業的真實檢驗。使得它涵蓋了Java 開發底層程式碼中的方方面面,既是大型專案開發中解決小問題的利器,也是小型專案中的效率擔當。

Hutool 是專案中 “util” 包友好的替代,它節省了開發人員對專案中公用類和公用工具方法的封裝時間,使開發專注於業務,同時可以最大限度的避免封裝不完善帶來的 bug。

下面透過一個演示,來看下 Hutool 如何提高我們的開發效率。

它如何提升我們的開發效率?

Hutool 的目標是使用一個工具方法代替一段複雜程式碼,從而最大限度的避免“複製貼上”程式碼的問題,徹底改變我們寫程式碼的方式。

以傳送郵件為例:

以前:開啟搜尋引擎 => 搜 “Java 如何傳送郵件” => 開啟幾篇部落格 => 選擇一個看似優秀的實現 => 複製貼上 => 改改就用

現在:引入 Hutool => 呼叫 MailUtil。sendText 方法 演示使用:

用了這個 Java 小工具,我廢了

說不定可以提前下班了呢!

Hutool 的存在原因之一就是為了減少程式碼搜尋成本,避免網路上參差不齊的程式碼出現導致的 bug。

如何使用 Hutool?

Hutool的用法非常簡單,而且對業務無任何侵入,可以直接透過 Maven 或者 Gradle 等包管理工具引入,也可以直接把 Hutool 的程式碼複製貼上到自己的專案中。

Maven 方式,在專案的 pom。xml 的 dependencies 中加入下列程式碼:

cn。hutool hutool-all 5。4。4

Gradle方式,在build。gradle中加入下列程式碼:

compile ‘cn。hutool:hutool-all:5。4。4’

然後就可以參照文件去使用啦,文件地址:https://hutool。cn/docs/

用了這個 Java 小工具,我廢了

Hutool 的功能

Hutool 的功能非常大而全,常用的工具有:

1。日期工具

透過 DateUtil 類,提供高度便捷的日期訪問、處理和轉換方式。

2。HTTP 客戶端

透過 HttpUtil 對 HTTP 客戶端的封裝,實現便捷的 HTTP 請求,並簡化檔案上傳操作。

3。轉換工具

透過 Convert 類中的相應靜態方法,提供一整套的型別轉換解決方案,並透過 ConverterRegistry 工廠類自定義轉換。

4。配置檔案工具(Setting)

透過 Setting 物件,提供相容 Properties 檔案的更加強大的配置檔案工具,用於解決中文、分組等 JDK 配置檔案存在的諸多問題。當然還有更多元件,如下:

模組

介紹

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

擴充套件模組,對第三方封裝(模板引擎、郵件、Servlet、二維碼、Emoji、FTP、分詞等)

hutool-http

基於HttpUrlConnection的Http客戶端封裝

hutool-log

自動識別日誌實現的日誌門面

hutool-script

指令碼執行封裝,例如Javascript

hutool-setting

功能更強大的Setting配置檔案和Properties封裝

hutool-system

系統引數呼叫封裝(JVM資訊等)

hutool-json

JSON實現

hutool-captcha

圖片驗證碼實現

hutool-poi

針對POI中Excel和Word的封裝

hutool-socket

基於Java的NIO和AIO的Socket封裝

可以根據需求對每個模組單獨引入,也可以透過引入 hutool-all 方式引入所有模組。

寫在最後

最後,給大家一點建議。

不要僅僅把 Hutool 當做一個工具去使用,

用久了會把人用傻的

用了這個 Java 小工具,我廢了

有時間的話,應該閱讀 Hutool 的原始碼,學習其各種工具類的優秀實現,培養自己的程式碼能力。

Hutool 的原始碼其實並不難,就是透過大量的靜態方法來方便呼叫,比如下面的手機號工具類:

/** * 手機號工具類 */ public class PhoneUtil { /** * 座機號碼 */ private static final Pattern TEL = Pattern。compile(“0\\d{2,3}-[1-9]\\d{6,7}”); /** * 驗證是否為手機號碼(中國) * * @param value 值 * @return 是否為手機號碼(中國) */ public static boolean isMobile(CharSequence value) { return Validator。isMatchRegex(PatternPool。MOBILE, value); } 。。。 }

大家可以自行閱讀感興趣的功能的原始碼,有朝一日自己也能成為開源大佬!