跳转至

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
}
这个示例串联了HTTP、JSON、日期、集合、文件IO和Excel操作,全程只依赖Hutool一个库,代码直观且高效,充分展现了其“化繁为简”的核心价值。

Hutool 5.8.42版本更新了什么

5.8.42版本主要带来了若干实用的新特性和重要的缺陷修复。核心新增了ListUtil.zip方法、JakartaSoapClient以及对AI模块的代理支持。此外,对Combination(组合)和Arrangement(排列)类进行了重构以提升性能,并优化了HexUtilEscapeUtil等工具。本次更新重点修复了JWT验证、数据库方言、HTTP连接、文件列表、缓存并发、内存泄漏等超过二十个具体问题,显著提升了框架的稳定性和健壮性。

更新日志

5.8.42 (2025-11-28)

🐣新特性

  • core ListUtil增加zip方法。
  • http 增加JakartaSoapClient
  • ai 增加代理支持。
  • core CharSequenceUtil增加builder方法重载。
  • core 重构CombinationArrangement以避免数组频繁拷贝,并防止溢出。
  • 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)方法会修改入参ByteBufferposition的问题。
  • core 修复ReflectUtil.newInstanceIfPossible传入Object类型时的逻辑错误。
  • core 修复DateModifier处理AM和PM时ceiling和round的问题。
  • poi 修复Word07Writerrun.setColor()的颜色十六进制转换逻辑。
  • core 修复Arrangement.iterate(int m)方法的排列迭代器实现逻辑问题。
  • core 修复HexUtil.format在处理长度小于2的字符串时会抛出异常,以及处理长度为奇数的字符串时最后一个字符被忽略的问题。
  • core 修复SplitIter.computeNext