偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

最強工具庫 Hutool,使用教程(含 Hutool-AI 使用講解)

人工智能
經(jīng)過本文的詳細介紹,相信你已經(jīng)對 Hutool 有了全面的認識。這款國產(chǎn)工具庫之所以能獲得廣泛認可,核心在于它真正理解 Java 開發(fā)者的痛點,用最簡單直接的方式解決問題。

在 Java 世界里,總有那樣一個工具庫,它既輕量又實用,把很多日常重復工作封裝成“開箱即用”的 API,讓你可以把精力放在業(yè)務邏輯本身。

對于中國開發(fā)者來說,Hutool 就是這樣一把“瑞士軍刀”——從字符串、集合、日期、IO、文件、加密,到 JDBC、JSON、HTTP、圖片、并發(fā)、甚至 AI 能力(hutool-ai),它幾乎覆蓋了你日常開發(fā)中會用到的絕大多數(shù)工具函數(shù)。

本文說明:此文所有代碼,都是有我本人在 5.8.40 版本親測可用不報錯,歡迎大家直接使用本文示例代碼。

什么是 Hutool?為何它能成為開發(fā)必備

Hutool = Hu + tool,是原公司項目底層代碼剝離后的開源庫,“Hu”是公司名稱的表示,tool 表示工具。Hutool 諧音“糊涂”,一方面簡潔易懂,一方面寓意“難得糊涂”。

這個始于 2014 年的開源項目,核心定位是 "減少代碼搜索成本,避免復制粘貼代碼導致的潛在問題"。與 Guava 等國外工具庫相比,Hutool 最大的優(yōu)勢在于對中文場景的深度適配和開發(fā)者友好的 API 設(shè)計。

Hutool 的核心優(yōu)勢

  • 中文友好:內(nèi)置農(nóng)歷日期計算、中文金額轉(zhuǎn)換等特色功能,完美解決本地化需求
  • 零依賴:純 Java 實現(xiàn),不引入額外第三方庫,避免依賴沖突
  • 模塊化設(shè)計:20 + 功能模塊支持按需引入,最小化項目體積
  • 活躍社區(qū):Gitee 托管的國產(chǎn)項目,issue 響應速度遠超許多國外庫
  • 持續(xù)進化:2025 年最新的 5.8.40 版本仍在高頻更新,不斷增強功能邊界

版本選擇指南

當前 Hutool 存在兩個重要版本線:

  • 5.x 系列:穩(wěn)定版本,截至本文發(fā)布,最新為 5.8.40(2025 年 8 月發(fā)布),保持向下兼容
  • 6.x 系列:正在醞釀的重構(gòu)版本,將包名從cn.hutool改為org.dromara.hutool,并優(yōu)化了大量 API 設(shè)計

?? 注意:生產(chǎn)環(huán)境建議使用 5.8.40 穩(wěn)定版,6.x 版本預計 2026 年正式發(fā)布,本文代碼示例將基于 5.8.40 版本,并標注 6.x 的差異之處。

快速入門:環(huán)境配置

通過 Maven 引入 Hutool 最簡單的方式是使用hutool-all包:

<dependency>
    <groupId>cn.hutool </groupId>
    <artifactId>hutool-all </artifactId>
    <version>5.8.40</version>
 </dependency>

第一個 Hutool 程序:

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;

public class HutoolDemo {

   public static void main(String[] args) {
       // 獲取當前時間并格式化
       String now = DateUtil.now();
       // 字符串模板替換
       String welcome = StrUtil.format("歡迎使用Hutool!當前時間:{}", now);
       System.out.println(welcome);
   }

}

這段代碼展示了 Hutool 最典型的使用方式:通過靜態(tài)工具類直接調(diào)用方法,無需創(chuàng)建實例,極大簡化了代碼結(jié)構(gòu)。

核心工具類詳解:從字符串到加密的全場景覆蓋

Hutool 的工具類遵循 "所見即所得" 的命名原則,StrUtil處理字符串,DateUtil處理日期,SecureUtil處理加密,讓開發(fā)者能僅憑類名就知道該用哪個工具。下面我們將逐一講解開發(fā)中最常用的核心模塊。

字符串處理:StrUtil 讓字符操作如行云流水

字符串處理是 Java 開發(fā)中最頻繁的操作之一,StrUtil類封裝了 200 + 常用方法,徹底告別String類的蹩腳 API。

空判斷—— 最常用也最容易出錯的操作:

// 原生Java寫法

if (str == null || str.length() == 0 || "null".equals(str)) {
   // 處理空字符串
}

// Hutool寫法
if (StrUtil.isEmpty(str)) {
   // 處理空字符串
}

// 更嚴格的空判斷(純空白字符也視為空)
if (StrUtil.isBlank(str)) {
   // 處理空白字符串
}

字符串格式化—— 支持多種占位符風格:

// 標準占位符
String result1 = StrUtil.format("姓名:{},年齡:{}", "張三", 25);

// 命名占位符
Map<String, Object> map = new HashMap <>();
map.put("name", "李四");
map.put("age", 30);
String result2 = StrUtil.format("姓名:{name},年齡:{age}", map);

字符串切割與拼接—— 靈活處理各種分隔符:

String str = "a,b,c,d";

// 切割字符串
List<String> list = StrUtil.split(str, ',');

// 拼接字符串
String join = StrUtil.join("|", list); // 結(jié)果:a|b|c|d

// 去除前后綴
String fileName = "report.pdf";
String name = StrUtil.removeSuffix(fileName, ".pdf"); // 結(jié)果:report

5.8.40 版本新特性:增強的脫敏功能,支持護照號碼脫敏:

import cn.hutool.core.util.DesensitizedUtil;

// 手機號脫敏:138****1234
String phone = DesensitizedUtil.mobilePhone("13812341234");

// 護照脫敏:E123****5678
String passport = DesensitizedUtil.passport("E12345678"); // 5.8.40新增

日期時間:DateUtil 解決所有時間難題

Java 的日期處理一直為人詬病,DateCalendar、LocalDateTime并存導致混亂,DateUtil將這些 API 統(tǒng)一封裝,提供直觀易用的日期操作。

日期格式化—— 無需記憶繁瑣的 pattern:

// 獲取當前時間
Date now = new Date();

// 格式化成年月日
String ymd = DateUtil.formatDate(now); // 2025-08-29

// 格式化時分秒
String hms = DateUtil.formatTime(now); // 15:30:45

// 自定義格式
String custom = DateUtil.format(now, "yyyy年MM月dd日 HH:mm:ss");

日期計算—— 鏈式調(diào)用輕松實現(xiàn):

// 昨天
Date yesterday = DateUtil.yesterday();

// 明天
Date tomorrow = DateUtil.tomorrow();

// 三天后
Date after3Days = DateUtil.offsetDay(now, 3);

// 十分鐘前
Date before10Min = DateUtil.offsetMinute(now, -10);

// 計算兩個日期差
Date start = DateUtil.parse("2025-01-01");
Date end = DateUtil.parse("2025-08-29");
long days = DateUtil.between(start, end, DateUnit.DAY); // 240天

中文特色功能—— 農(nóng)歷與節(jié)假日:

// 農(nóng)歷轉(zhuǎn)換
String lunar = DateUtil.lunar(now); // 農(nóng)歷七月十六

// 節(jié)假日判斷
boolean isWorkday = DateUtil.isWorkday(now); // 是否工作日
boolean isHoliday = DateUtil.isHoliday(now); // 是否節(jié)假日

小貼士:Hutool 的節(jié)假日數(shù)據(jù)會通過版本更新保持同步,如需自定義節(jié)假日,可通過 HolidayUtil 進行擴展。

集合操作:CollUtil 讓集合處理得心應手

Java 集合框架雖然強大,但很多常用操作仍需大量代碼,CollUtil彌補了這一不足,提供了集合創(chuàng)建、轉(zhuǎn)換、操作的一站式解決方案。

集合創(chuàng)建—— 一行代碼創(chuàng)建各種集合:

// 創(chuàng)建列表
List<String> list = CollUtil.newArrayList("a", "b", "c");

// 創(chuàng)建有序映射
Map<String, Integer> map = MapUtil.newHashMap(true);

// 創(chuàng)建固定大小的集合
Set<Integer> set = CollUtil.newHashSet(1, 2, 3, 4);

集合判斷與操作

List<Integer> numbers = CollUtil.newArrayList(1, 2, 3, 4, 5);

// 判斷非空
boolean notEmpty = CollUtil.isNotEmpty(numbers);

// 取前3個元素
List<Integer> top3 = ListUtil.sub(numbers, 0, 3); // [1,2,3]

// 集合拆分
List<List<Integer>> partition = ListUtil.partition(numbers, 2); // [[1,2],[3,4],[5]]

// 集合轉(zhuǎn)字符串
String str = CollUtil.join(numbers, ","); // "1,2,3,4,5"

Map 操作增強

Map<String, Object> user = new HashMap<>();
user.put("name", "張三");
user.put("age", 25);
user.put("address", null);

// 獲取值,不存在時返回默認值
String name = MapUtil.getStr(user, "name", "未知");
int age = MapUtil.getInt(user, "age", 0);

// 忽略null值轉(zhuǎn)換為字符串
String userStr = MapUtil.joinIgnoreNull(user, ",", "=");
// 結(jié)果:name=張三, age=25

加密工具:SecureUtil 一行代碼實現(xiàn)加密解密

數(shù)據(jù)安全是開發(fā)必備需求,SecureUtil封裝了對稱加密、非對稱加密、摘要算法等多種加密方式,無需了解復雜的加密原理即可輕松使用。

MD5 加密—— 常用于密碼存儲:

// 簡單MD5加密
String md5 = SecureUtil.md5("123456");

// 帶鹽值的MD5加密(更安全)
String saltMd5 = SecureUtil.md5("123456" + "salt");

AES 對稱加密—— 適用于敏感數(shù)據(jù)傳輸:

String content = "需要加密的內(nèi)容";
String key = "1234567890123456"; // AES密鑰長度必須是16/24/32位

// 加密
String encrypt = SecureUtil.aes(key.getBytes()).encryptBase64(content);

// 解密
String decrypt = SecureUtil.aes(key.getBytes()).decryptStr(encrypt);

國密算法—— 支持 SM2/SM3/SM4 等國家標準算法:

// SM3摘要算法
String sm3 = SmUtil.sm3("國密測試");

// SM4對稱加密
String sm4Encrypt = SmUtil.sm4(key.getBytes()).encryptBase64(content);

注意:加密算法的密鑰管理至關(guān)重要,生產(chǎn)環(huán)境中切勿將密鑰硬編碼在代碼中,建議通過配置中心管理。

文件操作:FileUtil 讓文件處理事半功倍

Java 的 IO 操作代碼冗長且容易出錯,FileUtilIoUtil將這些操作簡化到極致,無論是文件讀寫還是目錄操作都能輕松完成。

文件讀寫—— 幾行代碼搞定:

// 讀取文件內(nèi)容
String content = FileUtil.readString("test.txt", CharsetUtil.UTF_8);

// 寫入文件
FileUtil.writeString("Hello Hutool", "output.txt", CharsetUtil.UTF_8);

// 追加內(nèi)容
FileUtil.appendString("\n追加一行", "output.txt", CharsetUtil.UTF_8);

// 大文件拷貝
FileUtil.copy("largeFile.zip", new File("targetDir"), true); // true表示覆蓋

目錄操作

// 創(chuàng)建目錄
FileUtil.mkdir("newDir");

// 創(chuàng)建多級目錄
FileUtil.mkdir("parent/child/grandchild");

// 列出目錄下所有文件
List<File> files = List.of(FileUtil.ls("parent"));

// 遞歸列出所有Java文件
List<File> javaFiles = FileUtil.loopFiles("com", file -> file.getName().endsWith(".class"));

文件信息獲取

File file = new File("test.txt");

// 文件大小
long size = FileUtil.size(file);

// 人性化顯示大小
String humanSize = FileUtil.readableFileSize(size); // 如:1.5MB

// 文件類型
String type = FileUtil.getType(file); // txt

// 最后修改時間
Date lastModified = FileUtil.lastModifiedTime(file);

HTTP 客戶端:HttpUtil 輕松發(fā)送網(wǎng)絡(luò)請求

相比HttpClient的復雜配置,HttpUtil讓 HTTP 請求變得極其簡單,無論是 GET、POST 還是文件上傳下載都能輕松應對。

GET 請求

// 簡單GET請求
String result = HttpUtil.get("https://api.example.com/data");

// 帶參數(shù)的GET請求
Map<String, Object> paramMap = new HashMap <>();
paramMap.put("page", 1);
paramMap.put("size", 10);
String pageResult = HttpUtil.get("https://api.example.com/list", paramMap);

POST 請求

// 表單提交
Map<String, Object> formData = new HashMap <>();
formData.put("username", "test");
formData.put("password", "123456");
String loginResult = HttpUtil.post("https://api.example.com/login", formData);

// JSON提交
String json = "{\"name\":\"hutool\",\"version\":\"5.8.40\"}";
HttpResponse response = HttpUtil.createPost("https://api.example.com/submit")
   .body(json)
   .header("Content-Type", "application/json")
   .execute();

String jsonResult = response.body();

文件下載

// 下載文件到指定路徑
HttpUtil.downloadFile("https://example.com/file.zip", FileUtil.file("downloads"));

// 帶進度條的下載
HttpUtil.downloadFile("https://example.com/large.zip", FileUtil.file("downloads"),
   new StreamProgress() {

       @Override
       public void start() {
           System.out.println("開始下載");
       }

      @Override
      public void progress(long total, long progressSize) {
          System.out.println("已下載:" + FileUtil.readableFileSize(progressSize));

      }

       @Override
       public void finish() {
           System.out.println("下載完成");
       }
   });

hutool-ai 模塊:AI 能力集成新范式

隨著大模型技術(shù)的普及,Hutool 在 5.8.x 版本中新增了hutool-ai模塊,為開發(fā)者提供了簡單易用的 AI 能力集成方案。該模塊封裝了主流 AI 平臺的 API,支持文本生成、圖像生成等常見場景,并提供了統(tǒng)一的調(diào)用接口。

模塊引入與初始化

使用hutool-ai需要單獨引入依賴:

<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-ai</artifactId>
   <version>5.8.40</version>
</dependency>

初始化 AI 客戶端(以豆包平臺為例):

// 配置API密鑰
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");

// 創(chuàng)建deepseekAI客戶端
DeepSeekServiceImpl baseAIService = new DeepSeekServiceImpl(config);

文本生成功能

DeepSeekService 是 Hutool AI 模塊中專門對接 DeepSeek 大模型服務的接口,在基礎(chǔ) AIService 功能基礎(chǔ)上擴展了 DeepSeek 特有的功能。

// 配置API密鑰
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");

// 創(chuàng)建deepseekAI客戶端
DeepSeekServiceImpl baseAIService = new DeepSeekServiceImpl(config);

// 普通對話
String content = baseAIService.chat("寫一個瘋狂星期四廣告詞");

// 流式對話
baseAIService.chat("寫一個瘋狂星期四廣告詞", s -> {
    System.out.println(s);
});

// 查詢模型列表
String models = baseAIService.models();
// 查詢賬戶余額
String balance = baseAIService.balance();

圖片理解

DoubaoService 是 Hutool AI 模塊中對接豆包大模型服務的擴展接口,在基礎(chǔ) AIService 功能基礎(chǔ)上提供了豆包特有的多模態(tài)和高級功能支持。

// 配置API密鑰
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");

// 創(chuàng)建deepseekAI客戶端
DoubaoServiceImpl baseAIService = new DoubaoServiceImpl(config);
String base64 = "xxx"; // 圖片base64內(nèi)容
String chatVision = baseAIService.chatVision("圖片上有些什么?", Arrays.asList(base64));

視頻生成

// 配置API密鑰
AIConfig config = new BaseConfig();
config.setApiKey("sk-");
config.setApiUrl("https://api.deepseek.com/v1");
config.setModel("deepseek-reasoner");

// 創(chuàng)建deepseekAI客戶端
DoubaoServiceImpl baseAIService = new DoubaoServiceImpl(config);

String videoTasks = baseAIService.videoTasks("生成一段動畫視頻,主角是大耳朵圖圖,一個活潑可愛的小男孩。視頻中圖圖在公園里玩耍," +
"畫面采用明亮溫暖的卡通風格,色彩鮮艷,動作流暢。背景音樂輕快活潑,帶有冒險感,音效包括鳥叫聲、歡笑聲和山洞回聲。", "https://img2.baidu.com/it/u=862000265,4064861820&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1544");

//查詢視頻生成任務信息
String videoTasksInfo = baseAIService.getVideoTasksInfo("任務id");

總結(jié):為什么 Hutool 值得你全面擁抱

經(jīng)過本文的詳細介紹,相信你已經(jīng)對 Hutool 有了全面的認識。這款國產(chǎn)工具庫之所以能獲得廣泛認可,核心在于它真正理解 Java 開發(fā)者的痛點,用最簡單直接的方式解決問題。

責任編輯:武曉燕 來源: 程序員wayn
相關(guān)推薦

2023-04-10 09:11:27

HutoolJava工具

2023-12-13 08:11:36

2023-02-06 09:34:00

JavaHutool操作文件

2011-07-06 10:46:33

Xcode

2011-07-06 10:32:07

Xcode

2023-01-11 07:14:39

DateUtil用法Hutool

2023-02-15 14:02:52

HutoolMapProxy工具包

2023-07-28 09:50:54

Hutool工具Java

2024-03-11 08:21:49

2024-01-22 08:46:37

MyBatis數(shù)據(jù)脫敏Spring

2020-03-23 15:35:36

Java工具類Hutool

2022-06-12 21:28:26

Fluentd開源

2025-09-10 00:00:00

HutoolAI開源框架

2023-09-28 21:39:26

HutoolJava工具包

2025-03-31 00:55:00

2023-10-09 07:37:01

2025-03-11 08:34:22

2009-12-21 14:25:07

2022-12-19 07:21:35

Hutool-db數(shù)據(jù)庫JDBC

2019-11-13 12:39:26

Python 開發(fā)編程語言
點贊
收藏

51CTO技術(shù)棧公眾號