Hutool 被称为 Java 开发界的“瑞士军刀”,它通过静态方法封装了大量常用操作,极大地减少了样板代码。虽然官方并没有一个固定的“Top 100 API”榜单,但根据日常后端开发的高频场景,我整理了最核心、最高频使用的约 100 个 API,按功能模块分类,方便查阅和记忆。
依赖引入 (Maven):
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.29</version> <!-- 请使用最新版本 -->
</dependency>
日常使用频率最高,替代 Apache Commons Lang 的 StringUtils
功能 | 常用 API | 说明 |
|---|
判空 | isEmpty(str)
| 判断是否为 null 或 "" |
| isNotEmpty(str)
| 判断是否非空 |
| isBlank(str)
| 判断是否为 null、"" 或纯空格 |
| isNotBlank(str)
| 判断是否非空白 |
格式化 | format("{} is {}", name, age)
| 类似 Slf4j 的占位符格式化 |
截取 | sub(str, start, end)
| 截取子串 |
| subBefore(str, separator, isFromEnd)
| 截取分隔符前的内容 |
| subAfter(str, separator, isFromEnd)
| 截取分隔符后的内容 |
转换 | toCamelCase(str)
| 转小驼峰 (user_name -> userName) |
| toUnderlineCase(str)
| 转下划线 (userName -> user_name) |
| upperFirst(str) / lowerFirst(str)
| 首字母大写/小写 |
填充 | padPre(str, size, padChar)
| 左侧填充 (如补零) |
| padAfter(str, size, padChar)
| 右侧填充 |
其他 | trim(str)
| 去除首尾空格 |
| split(str, separator)
| 分割字符串 |
| join(",", list)
| 集合转字符串 |
| reverse(str)
| 反转字符串 |
| equals(str1, str2)
| 安全比较 (避免 NPE) |
| contains(str, sub)
| 是否包含子串 |
处理 List, Set, Map 的神器
功能 | 常用 API | 说明 |
|---|
创建 | newArrayList(), newLinkedList()
| 快速创建集合 |
| newHashSet(), newLinkedHashSet()
| 快速创建 Set |
| newHashMap(), newLinkedHashMap()
| 快速创建 Map |
判空 | isEmpty(collection)
| 判断集合是否为 null 或空 |
| isNotEmpty(collection)
| 判断非空 |
转换 | toList(collection)
| 转 List |
| toSet(collection)
| 转 Set |
| collToMap(list, keyFunc)
| 列表转 Map (Java8 风格) |
操作 | union(list1, list2)
| 并集 |
| intersection(list1, list2)
| 交集 |
| difference(list1, list2)
| 差集 |
| distinct(list)
| 去重 |
| sort(list, comparator)
| 排序 |
| getFirst(list)
| 安全获取第一个元素 |
| addAll(target, source)
| 批量添加 |
彻底告别 SimpleDateFormat 的线程安全问题
功能 | 常用 API | 说明 |
|---|
当前时间 | now()
| 获取当前 Date |
| today()
| 获取今天日期 (Date) |
| currentMillis()
| 当前时间戳 (long) |
格式化 | format(date)
| 默认格式 yyyy-MM-dd HH:mm:ss |
| format(date, "yyyy/MM/dd")
| 自定义格式 |
| parse("2023-01-01")
| 字符串转 Date |
| parse("2023-01-01", "yyyy/MM/dd")
| 自定义格式解析 |
计算 | offsetDay(date, 1)
| 加 1 天 |
| offsetHour(date, -2)
| 减 2 小时 |
| betweenMs(start, end)
| 计算毫秒差 |
| betweenDay(start, end)
| 计算天数差 |
特殊值 | beginOfDay(date)
| 当天开始时间 (00:00:00) |
| endOfDay(date)
| 当天结束时间 (23:59:59) |
| age(birthday)
| 计算年龄 |
其他 | date(millis)
| 时间戳转 Date |
| isWeekend(date)
| 是否周末 |
万能转换器,减少 try-catch
功能 | 常用 API | 说明 |
|---|
转字符串 | toStr(obj)
| 任意对象转 String (null 转 "") |
| toStr(obj, defaultValue)
| 带默认值 |
转数字 | toInt(obj)
| 转 int |
| toLong(obj)
| 转 long |
| toDouble(obj)
| 转 double |
转布尔 | toBool(obj)
| 转 boolean ("true", 1, true 都变 true) |
转日期 | toDate(obj)
| 转 Date |
转数组 | toArray(String.class, str)
| 字符串转数组 |
转集合 | toCollection(List.class, obj)
| 转集合 |
其他 | charset(str, oldCharset, newCharset)
| 编码转换 |
内置轻量级 JSON 库,无需引入 Jackson/Fastjson 即可处理简单场景
功能 | 常用 API | 说明 |
|---|
序列化 | toJsonStr(obj)
| 对象转 JSON 字符串 |
| toJsonPrettyStr(obj)
| 格式化(美化)输出 |
反序列化 | toBean(jsonStr, Class)
| JSON 字符串转 Java 对象 |
| toList(jsonStr, Class)
| JSON 数组转 List |
解析操作 | parseObj(jsonStr)
| 转为 JSONObject (可链式调用) |
| parseArray(jsonStr)
| 转为 JSONArray |
判断 | isTypeJSON(str)
| 判断是否是 JSON 格式 |
Map 操作 | beanToMap(obj)
| 对象转 Map |
| mapToBean(map, Class)
| Map 转对象 |
简化文件读写,自动处理流关闭
功能 | 常用 API | 说明 |
|---|
读取 | readUtf8String(file)
| 读取整个文件为字符串 |
| readLines(file)
| 读取为 List |
| getInputStream(file)
| 获取输入流 |
写入 | writeUtf8String(content, file)
| 写入字符串 (覆盖) |
| appendUtf8String(content, file)
| 追加字符串 |
| writeLines(lines, file)
| 写入多行 |
操作 | mkdir(dir)
| 创建目录 (不存在则创建) |
| copy(src, dest)
| 复制文件/目录 |
| move(src, dest)
| 移动文件 |
| del(file)
| 删除文件/目录 |
| exists(file)
| 判断是否存在 |
| getSuffix(file)
| 获取后缀名 |
流工具 | close(closeable)
| 安全关闭流 (无异常抛出) |
| readBytes(inputStream)
| 流转字节数组 |
基于 HttpURLConnection 的封装,无需引入 HttpClient
功能 | 常用 API | 说明 |
|---|
GET | get(url, paramMap)
| 发送 GET 请求,返回 String |
POST | post(url, paramMap)
| 发送表单 POST 请求 |
| postJson(url, jsonStr)
| 发送 JSON 请求 (RESTful 常用) |
下载 | downloadFile(url, destPath)
| 下载文件到本地 |
上传 | upload(url, fileMap)
| 上传文件 |
配置 | createGet(url).timeout(5000).execute()
| 链式调用设置超时、Header 等 |
一行代码实现常用加密
功能 | 常用 API | 说明 |
|---|
MD5 | md5(str)
| MD5 摘要 (32 位小写) |
SHA | sha256(str)
| SHA-256 摘要 |
Base64 | encodeBase64(bytes)
| 编码 |
| decodeBase64(str)
| 解码 |
AES | aes.encrypt(data, key)
| AES 加密 |
| aes.decrypt(data, key)
| AES 解密 |
RSA | generateKeyPair(1024)
| 生成 RSA 密钥对 |
UUID | randomUUID()
| 生成随机 UUID |
随机数 | randomInt(min, max)
| 生成随机整数 |
替代 Spring 的 BeanUtils,支持深浅拷贝
功能 | 常用 API | 说明 |
|---|
拷贝 | copyProperties(source, target)
| 属性拷贝 (浅拷贝) |
| toBean(map, Class)
| Map 转 Bean |
| beanToMap(bean)
| Bean 转 Map |
判断 | isNull(obj) / isNotNull(obj)
| 判空 |
| equals(obj1, obj2)
| 安全比较 |
反射 | getFieldValue(obj, fieldName)
| 获取字段值 (反射) |
| setFieldValue(obj, fieldName, value)
| 设置字段值 |
ID | objectId(obj)
| 获取对象的 hashCode 字符串 |
10. 其他高频工具
模块 | 类名 | 常用 API | 说明 |
|---|
系统 | SystemUtil
| getJvmInfo(), getOsInfo()
| 获取 JVM 和操作系统信息 |
线程 | ThreadUtil
| sleep(ms), execute(runnable)
| 安全休眠和执行 |
正则 | ReUtil
| getGroup0(pattern, content)
| 提取正则匹配内容 |
身份证 | IdcardUtil
| isValidCard(id)
| 校验身份证号 |
货币 | MoneyUtil
| parse(str)
| 金额解析和格式化 |
压缩 | ZipUtil
| zip(src, dest)
| 文件/文件夹压缩 |
图片 | ImgUtil
| scale(img, width, height)
| 图片缩放、裁剪、水印 |
二维码 | QrUtil
| generate(content, outputPath)
| 生成二维码 |
cron | CronUtil
| schedule(cronExpr, runnable)
| 简易定时任务调度 |
树形 | TreeUtil
| build(list)
| 列表转树形结构 (菜单常用) |
最佳实践建议
判空首选:尽量用 StrUtil.isEmpty() 和 CollUtil.isEmpty() 代替手写的 obj == null || obj.length() == 0。
日期处理:彻底放弃 SimpleDateFormat,全面转向 DateUtil 或 Java 8 的 LocalDateTime (Hutool 也提供了 LocalDateTimeUtil)。
JSON 轻量场景:如果是内部微服务调用或简单的配置解析,直接用 JSONUtil 可以减少一个重型依赖(如 Jackson)。但在对外接口或复杂映射场景,仍建议使用 Jackson/Fastjson。
文件流:使用 FileUtil 和 IoUtil 可以完全不用写 try-catch-finally 来关闭流。
评论