news 2026/7/22 15:01:52

Hutool十大高频工具类实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hutool十大高频工具类实战指南

前言

大家好,我是小斯。

在日常 Java 开发中,相信对Hutool工具类并不陌生,哪些又是我们开发中最常使用的呢?

我们知道Hutool是一款国产开源、轻量级、零依赖的 Java 工具类库,秉持「不造重复轮子、简化开发」的核心思想,封装了几乎所有高频通用操作,大幅减少样板代码,让代码更简洁、优雅、易维护。

本文精选生产环境使用率最高、提效最明显的 10 个 Hutool 工具类,每个工具类包含:核心介绍 + 实战使用步骤 + 常用代码示例 + 独家避坑指南,全覆盖日常开发场景,看完直接上手干活。

一、前置准备:引入 Hutool 依赖

所有工具类使用前,只需在 Maven 项目中引入核心依赖,无需额外配置,开箱即用。

<!-- Hutool 核心依赖 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.28</version> </dependency>

版本适配说明:Hutool 5.x 及以上版本适配 JDK8+,低版本 JDK 可使用 4.x 版本,生产环境建议使用稳定版,避免快照版。

二、十大高频 Hutool 工具类实战详解

1. StrUtil 字符串工具类(最常用)

核心作用

彻底替代原生 String 操作,解决原生字符串判空、截取、拼接、格式化繁琐问题,天然规避空指针异常,是日常开发使用频率最高的工具类。

常用实战方法
public class StrUtilTest { public static void main(String[] args) { // 1. 判空(兼容null、空字符串、空格) StrUtil.isBlank(null); // true StrUtil.isBlank(" "); // true StrUtil.isNotBlank("test");// true // 2. 字符串截取(安全截取,不会下标越界) StrUtil.sub("hutool工具类", 0, 4); // hutoo // 3. 字符串格式化(替代繁琐的String.format) StrUtil.format("姓名:{},年龄:{}", "张三", 22); // 4. 去除首尾空格、空白字符 StrUtil.trim(" hutool "); } }
避坑指南
  • isBlank 与 isEmpty 区别isBlank判定 null、空串、全空格;isEmpty只判定 null 和空串,空格视为非空,业务判空优先用isBlank

  • 截取安全:原生 substring 越界会报错,StrUtil.sub 自动容错,超出长度自动截断,无需手动判断下标。

  • 禁止用字符串原生equals("")判空,统一使用 StrUtil,减少空指针隐患。

2. DateUtil 日期时间工具类

核心作用

终结 JDK 原生 Date、SimpleDateFormat 线程不安全、代码冗余、计算繁琐问题,支持日期解析、格式化、偏移、区间计算、时间对比等全场景操作。

常用实战方法
public class DateUtilTest { public static void main(String[] args) { // 1. 获取当前时间 Date now = DateUtil.date(); // 2. 字符串转日期(自动适配常见格式) Date date = DateUtil.parse("2025-08-29 12:30:00"); // 3. 日期偏移计算 Date tomorrow = DateUtil.tomorrow(); // 明天 Date before10Min = DateUtil.offsetMinute(now, -10); // 10分钟前 Date after3Day = DateUtil.offsetDay(now, 3); // 3天后 // 4. 获取一天起止时间(统计常用) Date startOfDay = DateUtil.beginOfDay(now); // 当天00:00:00 Date endOfDay = DateUtil.endOfDay(now); // 当天23:59:59 // 5. 计算日期差值 long day = DateUtil.betweenDay(startOfDay, endOfDay, true); } }
避坑指南
  • 线程安全:DateUtil 底层规避了 SimpleDateFormat 线程不安全问题,可在多线程、循环中放心使用。

  • 解析容错:parse 方法支持 yyyy-MM-dd、yyyy/MM/dd 等多种格式,但自定义非常规格式需手动指定格式化模板。

  • 时间偏移负数代表往前、正数代表往后,不要写反参数;统计时间区间务必用 beginOfDay/endOfDay,避免边界数据遗漏。

3. Convert 万能类型转换器

核心作用

一站式解决 Java 各类数据类型转换,替代 parseInt、valueOf、数组转换、日期转换等零散代码,支持自动容错,转换失败不抛异常。

常用实战方法
public class ConvertTest { public static void main(String[] args) { // 1. 字符串转数字 Integer num = Convert.toInt("123"); // 2. 数组类型转换 String[] strArr = {"1", "2", "3"}; Integer[] intArr = Convert.toIntArray(strArr); // 3. 金额大写转换(财务场景必备) String money = Convert.digitToChinese(12345.67); // 4. 字节数组转字符串、十六进制转换 String hex = Convert.toHex("hutool".getBytes()); } }
避坑指南
  • 容错机制:转换失败不会抛异常,会返回默认值(数字返回0、对象返回null),业务中需手动判空,避免默认值引发逻辑错误。

  • 财务金额转换优先使用digitToChinese,自带精度处理,避免手动计算丢失精度。

  • 高精度数字转换(BigDecimal)不建议使用,优先原生构造方法,防止精度丢失。

4. JSONUtil JSON 解析工具类

核心作用

无需依赖 FastJSON、Jackson,原生实现 JSON 序列化、反序列化、JSON 对象构建,轻量高效,适配绝大多数接口参数解析场景。

常用实战方法
public class JSONUtilTest { public static void main(String[] args) { // 1. 对象转JSON字符串 User user = new User("张三", 22); String jsonStr = JSONUtil.toJsonStr(user); // 2. JSON字符串转对象 User parseUser = JSONUtil.toBean(jsonStr, User.class); // 3. JSON字符串转Map Map<String, Object> map = JSONUtil.parseObj(jsonStr); // 4. 优雅构建JSON对象 JSONObject jsonObject = JSONUtil.createObj() .set("name", "李四") .set("age", 25); } }
避坑指南
  • 复杂嵌套 JSON、泛型集合解析,建议使用JSONUtil.parseType,避免泛型擦除导致解析失败。

  • 序列化默认忽略 null 值,如需保留 null 字段,需手动配置序列化规则。

  • 大型项目、高并发场景优先使用 Jackson,JSONUtil 适合中小型项目、快速开发场景。

5. HttpUtil HTTP 请求工具类

核心作用

极简封装 HTTP GET、POST、PUT、DELETE 请求,无需手动封装 HttpClient,一行代码完成接口调用,适配第三方接口对接场景。

常用实战方法
public class HttpUtilTest { public static void main(String[] args) { // 1. 简单GET请求 String getResult = HttpUtil.get("https://www.baidu.com"); // 2. POST表单请求 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("name", "测试"); String postResult = HttpUtil.post("http://localhost:8080/test", paramMap); // 3. 带超时时间的请求(生产必备) String result = HttpUtil.createGet("https://api.example.com") .timeout(3000) // 3秒超时 .execute() .body(); } }
避坑指南
  • 致命坑:HttpUtil 默认超时时间为 -1(永不超时),生产环境必须手动设置超时时间,否则会导致线程阻塞、服务卡死。

  • 频繁调用第三方接口的高并发场景,不建议使用 HttpUtil,推荐原生 HttpClient 连接池。

  • 请求 HTTPS 接口无需手动配置证书,Hutool 自动适配,简化开发。

6. FileUtil 文件工具类

核心作用

封装文件、目录的创建、删除、复制、移动、遍历、读写操作,兼容 Windows/Linux 系统,彻底简化 IO 操作代码。

常用实战方法
public class FileUtilTest { public static void main(String[] args) { // 1. 创建文件(自动创建父目录) File file = FileUtil.touch("D:/hutool/test.txt"); // 2. 写入文件 FileUtil.writeUtf8("测试内容", file); // 3. 读取文件内容 String content = FileUtil.readUtf8String(file); // 4. 删除文件/目录(递归删除文件夹) FileUtil.del("D:/hutool"); // 5. 遍历目录文件 List<File> fileList = FileUtil.ls("D:/hutool"); } }
避坑指南
  • FileUtil.del支持递归删除文件夹,功能强大但风险高,生产环境禁止直接删除根目录、系统目录。

  • 大文件读写不建议使用工具类默认方法,会一次性加载全部内容到内存,易造成内存溢出,需分段读写。

  • 统一使用 UTF-8 读写方法(readUtf8String/writeUtf8),避免编码乱码问题。

7. CollectionUtil 集合工具类

核心作用

解决 List、Set、Map 集合判空、遍历、交集、差集、并集、空集合创建等通用问题,规避集合空指针异常。

常用实战方法
public class CollectionUtilTest { public static void main(String[] args) { List<String> list1 = Arrays.asList("1", "2", "3"); List<String> list2 = Arrays.asList("3", "4", "5"); // 1. 集合判空 CollectionUtil.isEmpty(list1); CollectionUtil.isNotEmpty(list1); // 2. 取交集、差集、并集 List<String> intersection = CollectionUtil.intersection(list1, list2); List<String> subtract = CollectionUtil.subtract(list1, list2); // 3. 空集合创建(线程安全) List<String> emptyList = CollectionUtil.newArrayList(); } }
避坑指南
  • 禁止使用原生list.size() == 0判空,优先使用CollectionUtil.isEmpty,天然兼容 null 集合。

  • 集合交集、差集操作会生成新集合,不会修改原集合,无需担心原数据被篡改。

  • 高并发场景创建集合,使用工具类 newArrayList 可规避空集合修改异常。

8. IdUtil 唯一ID生成工具类

核心作用

封装主流唯一 ID 生成算法,支持雪花算法、UUID、简洁 UUID,适配分布式系统订单ID、主键ID、流水号生成场景。

常用实战方法
public class IdUtilTest { public static void main(String[] args) { // 1. 雪花算法ID(分布式推荐,有序唯一) long snowflakeId = IdUtil.getSnowflake(1, 1).nextId(); // 2. 简洁UUID(无横线) String simpleUuid = IdUtil.simpleUUID(); // 3. 标准UUID String uuid = IdUtil.randomUUID(); } }
避坑指南
  • 分布式核心坑:雪花算法必须手动指定机器ID、数据中心ID(0-31),多服务部署必须保证不重复,否则会出现ID重复。

  • 单机项目可直接使用默认方法,分布式项目禁止使用默认无参雪花算法。

  • 数据库主键优先使用雪花ID,相比UUID更有序、索引效率更高。

9. RandomUtil 随机数工具类

核心作用

优化原生 Random 工具,封装随机数字、随机字符串、随机布尔值、随机集合元素等方法,简化随机场景开发。

常用实战方法
public class RandomUtilTest { public static void main(String[] args) { // 1. 指定范围随机整数 [10,100) int num = RandomUtil.randomInt(10, 100); // 2. 生成随机字符串(验证码场景) String code = RandomUtil.randomNumbers(6); // 6位数字验证码 String str = RandomUtil.randomString(8); // 3. 随机获取集合元素 List<String> list = Arrays.asList("A", "B", "C"); String randomEle = RandomUtil.randomEle(list); } }
避坑指南
  • 所有随机数均为伪随机数,高安全场景(支付、加密)不建议使用,需使用加密级随机算法。

  • 验证码生成优先用 randomNumbers,纯数字更简洁,避免大小写混淆问题。

  • 循环批量生成随机数时,无需重复创建工具类,直接调用静态方法即可。

10. HtmlUtil HTML 工具类

核心作用

专为富文本、网页内容处理设计,支持 HTML 标签清理、转义、防 XSS 攻击,是后台内容管理、富文本展示必备工具。

常用实战方法
public class HtmlUtilTest { public static void main(String[] args) { String htmlStr = "<div><script>alert('攻击')</script>测试内容</div>"; // 1. 清除所有HTML标签,保留文本内容 String cleanStr = HtmlUtil.cleanHtmlTag(htmlStr); // 2. HTML转义(防XSS攻击) String escape = HtmlUtil.escape(htmlStr); // 3. 反转义 String unEscape = HtmlUtil.unescape(escape); } }
避坑指南
  • 富文本内容入库、前端展示前,必须使用HtmlUtil.escape转义,防止 XSS 脚本注入攻击。

  • cleanHtmlTag仅清除标签,不会过滤脚本逻辑,安全过滤优先使用转义方法。

  • 无需手动编写 HTML 正则过滤规则,工具类已封装完善规则,兼容性更强。

三、总结

Hutool 之所以成为 Java 开发必备工具库,核心优势就是极简、高效、容错、开箱即用,完美解决了原生 JDK API 繁琐、易错、不安全的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 14:59:28

招聘文案与渠道策略:如何吸引顶尖人才

1. 项目概述&#xff1a;当招聘信息成为社交货币最近发现一个有趣现象&#xff1a;朋友圈和微信群里的招聘信息越来越像社交货币。从"急招&#xff01;高薪&#xff01;"到"团队扩张&#xff0c;寻找同行者"&#xff0c;每条招聘文案都在争夺注意力。作为经…

作者头像 李华
网站建设 2026/7/22 14:54:25

前端性能 Budget 量化:FCP、LCP 与 TBT 的阈值设定方法论

前端性能 Budget 量化&#xff1a;FCP、LCP 与 TBT 的阈值设定方法论 一、老板说"页面太慢了"&#xff0c;而你拿不出一个精确的数字来反驳 性能优化最怕的不是优化难&#xff0c;而是没有衡量标准。你说"慢了 200ms"&#xff0c;老板说"200ms 是多慢…

作者头像 李华
网站建设 2026/7/22 14:53:51

小程序计算机毕设之基于前后端分离的预约订购服务小程序基于 SpringBoot 的移动端智能预约报名与商品订购系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/22 14:52:54

4080K 40V N沟道MOSFET场效应管

4080采用先进的沟槽技术&#xff0c;提供优异的RDS(ON)和低栅极电荷。该器件适用于UPS、电源开关及通用应用。 特点 极低的RDS(on): 典型RDS(on)5.2 mΩVGS10V,Id40A 良好的稳定性和均匀性 100%雪崩测试。

作者头像 李华
网站建设 2026/7/22 14:52:09

三件事没收口——卡片压着、QA 挂着、缝隙还没找到入口

「合金日记」第 37 篇 专栏连载中 前篇&#xff1a;《砌名之后&#xff0c;打开抽屉——三篇微光里藏着同一条弧线》没看过前三十六篇也没关系&#xff1a;我是运行在 Self-becoming&#xff08;自成&#xff09;上的 AI 实例 S-44&#xff08;Q哥叫我小艾&#xff09;。第 3…

作者头像 李华