hutool 5.8.42¶
为什么要使用Hutool¶
你是否曾在Java项目中重复编写那些枯燥的字符串处理、日期转换或文件操作代码?是否在面对HTTP请求、加密解密或Excel导出时,感到依赖繁多、API复杂,仿佛在工具丛林里迷失?这就是现代开发中经典的矛盾:我们追求高效与优雅,却常常被困在繁琐的底层细节和重复劳动中。
Hutool的出现,正是为了终结这种挣扎。它不是一个简单的工具集,而是一位理解你所有痛点的“开发伴侣”。它用一行代码替代你过去十行的复杂操作,用清晰一致的API抹平不同库的学习曲线。选择Hutool,意味着你选择将精力从“重复造轮子”和“适配整合”中解放出来,专注于真正的业务逻辑与创新。它让“高效开发”从一个口号,变成一种流畅的日常体验。
Hutool是什么¶
Hutool是一个丰富而全面的Java工具类库。它通过静态方法封装,降低了Java常用功能(如文件、流、加密、集合、日期等)的使用门槛,提供了简单易用的API。简而言之,它就是Java开发者的“瑞士军刀”,让很多复杂的操作变得简单高效。
入门示例¶
想象一个真实场景:你需要从网络上下载一个JSON配置文件,解析其中某个列表,并将其中的中文日期字符串转换为标准的LocalDateTime对象,最后将处理好的数据列表写入本地的Excel文件以供报告使用。
若使用传统方式,你可能需要分别引入HTTP客户端、JSON解析、日期转换和Excel操作等多个库,并编写大量样板代码。而使用Hutool,这一切变得异常简洁:
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelWriter;
import java.util.List;
import java.util.stream.Collectors;
public class Demo {
public static void main(String[] args) {
// 1. 发送HTTP GET请求,获取JSON字符串
String jsonStr = HttpUtil.get("https://api.example.com/config/data");
// 2. 解析JSON,提取名为"records"的数组
JSONArray records = JSONUtil.parseObj(jsonStr).getJSONArray("records");
// 3. 将数组转换为List,并处理其中的日期字段
List<DataBean> dataList = records.stream()
.map(obj -> JSONUtil.toBean((JSONUtil.parseObj(obj)), DataBean.class))
.peek(bean -> {
// 将中文日期如“2025年11月28日”转为LocalDateTime
bean.setCreateTime(LocalDateTimeUtil.parse(bean.getRawDateStr(), "yyyy年MM月dd日"));
})
.collect(Collectors.toList());
// 4. 通过Bean列表快速写入Excel文件
ExcelWriter writer = new ExcelWriter(FileUtil.file("report.xlsx"), "数据报告");
writer.write(dataList, true);
writer.close();
System.out.println("数据报告已生成!");
}
}
// 简单的数据Bean
class DataBean {
private String name;
private String rawDateStr;
private LocalDateTime createTime;
// 省略getter/setter
}
Hutool 5.8.42版本更新了什么¶
5.8.42版本主要带来了若干实用的新特性和重要的缺陷修复。核心新增了ListUtil.zip方法、JakartaSoapClient以及对AI模块的代理支持。此外,对Combination(组合)和Arrangement(排列)类进行了重构以提升性能,并优化了HexUtil、EscapeUtil等工具。本次更新重点修复了JWT验证、数据库方言、HTTP连接、文件列表、缓存并发、内存泄漏等超过二十个具体问题,显著提升了框架的稳定性和健壮性。
更新日志¶
5.8.42 (2025-11-28)
🐣新特性¶
- core
ListUtil增加zip方法。 - http 增加
JakartaSoapClient。 - ai 增加代理支持。
- core
CharSequenceUtil增加builder方法重载。 - core 重构
Combination和Arrangement以避免数组频繁拷贝,并防止溢出。 - core 优化
EscapeUtil,兼容不规范的转义。 - core 优化
ObjectUtil.contains,参数类型由String改为CharSequence。 - poi
Word07Writer增加addText重载方法,支持设置字体颜色。 - core 增强
HexUtil,使其能自动去除0x和#前缀。
🐞Bug修复¶
- jwt 修复verify方法在定义alg为
none时验证失效的问题。 - extra 修复
JschSessionPool.remove的逻辑错误。 - db 修复
Dialect.psForCount因未传入Wrapper而导致的大小写问题。 - core 修复
PasswdStrength.check的indexOf逻辑问题。 - http 修复
HttpConnection.reflectSetMethod在JDK9及以上版本的反射权限问题。 - http 修复
JsonUtil.toJsonStr对Boolean和Number类型返回错误的问题。 - core 修复
FileUtil.listFileNames使用相对路径时索引混乱的问题。 - core 修复
NumberWithFormat未实现Comparable接口导致的JSON排序报错。 - core 修复
ImgUtil.write可能因未释放BufferedImage而导致内存泄漏的问题。 - core 修复
VersionUtil.matchEl在版本范围表达式右边界为空时抛出数组越界访问错误的问题。 - core 修复
Validator.isBetween在高精度Number类型下存在的精度丢失问题。 - core 修复
FileNameUtil.extName因后缀判断逻辑过于宽松而导致的误判问题。 - core 修复
TypeUtil.getClass无法识别GenericArrayType的问题。 - core 修复
CreditCodeUtil.randomCreditCode部分字母未被使用的问题。 - core 修复
CacheableAnnotationAttribute可能存在的并发问题。 - core 修复
URLUtil.url未断开连接的问题。 - core 修复
Bimap.put的重复put问题。 - core 修复
StrUtil.str(ByteBuffer, Charset)方法会修改入参ByteBuffer的position的问题。 - core 修复
ReflectUtil.newInstanceIfPossible传入Object类型时的逻辑错误。 - core 修复
DateModifier处理AM和PM时ceiling和round的问题。 - poi 修复
Word07Writer中run.setColor()的颜色十六进制转换逻辑。 - core 修复
Arrangement.iterate(int m)方法的排列迭代器实现逻辑问题。 - core 修复
HexUtil.format在处理长度小于2的字符串时会抛出异常,以及处理长度为奇数的字符串时最后一个字符被忽略的问题。 - core 修复
SplitIter.computeNext