Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。
一、常用核心工具类
1. 字符串工具 - StrUtil
- 判空操作:
isEmpty()
,isNotEmpty()
,isBlank()
,isNotBlank()
- 格式化:
format()
类似Slf4j的格式化 - 截取:
sub()
,subBefore()
,subAfter()
- 转换:
toCamelCase()
(转驼峰),toUnderlineCase()
(转下划线) - 填充:
padPre()
,padAfter()
2. 日期时间工具 - DateUtil
- 日期转换:
parse()
支持多种日期格式自动识别 - 日期格式化:
format()
自定义输出格式 - 日期计算:
DateUtil.offsetDay(new Date(), 3); // 3天后 DateUtil.between(new Date(), endDate, DateUnit.DAY); // 计算日期间隔
3. 文件IO工具 - FileUtil
- 文件操作:
FileUtil.touch("/path/to/file"); // 创建文件 FileUtil.mkdir("/path/to/dir"); // 创建目录 FileUtil.copy("/src", "/dest", true); // 复制文件/目录
- 文件读写:
FileUtil.writeString("content", "/path/to/file", "UTF-8"); String content = FileUtil.readString("/path/to/file", "UTF-8");
4. 集合工具 - CollUtil
- 创建集合:
List<String> list = CollUtil.newArrayList("a", "b", "c"); Map<String, Integer> map = CollUtil.newHashMap("key1", 1, "key2", 2);
- 集合操作:
CollUtil.sortByProperty(list, "age"); // 按属性排序 CollUtil.groupByField(list, "gender"); // 按字段分组
5. 类型转换工具 - Convert
- 基础类型转换:
int i = Convert.toInt("123"); Date date = Convert.toDate("2023-05-01");
- 特殊转换:
String unicode = Convert.strToUnicode("你好"); String hex = Convert.toHex("Hello".getBytes());
6. 加密解密工具 - SecureUtil
- 摘要算法:
String md5 = SecureUtil.md5("password"); String sha256 = SecureUtil.sha256("data");
- 对称加密:
AES aes = SecureUtil.aes(key); String encrypted = aes.encryptHex("plaintext");
二、进阶工具类
7. HTTP客户端工具 - HttpUtil
// GET请求
String result = HttpUtil.get("https://example.com");
// POST表单
Map<String, Object> params = new HashMap<>();
params.put("key1", "value1");
String response = HttpUtil.post("https://example.com", params);
// 文件下载
HttpUtil.downloadFile("https://example.com/file.zip", "/local/path/");
8. 唯一ID生成工具 - IdUtil
String uuid = IdUtil.randomUUID(); // UUID
long snowflakeId = IdUtil.getSnowflake().nextId(); // 雪花ID
String objectId = IdUtil.objectId(); // MongoDB风格ID
9. 二维码工具 - QrCodeUtil
// 生成二维码到文件
QrCodeUtil.generate("https://hutool.cn", 300, 300, FileUtil.file("/path/qrcode.jpg"));
// 解析二维码
String content = QrCodeUtil.decode(FileUtil.file("/path/qrcode.jpg"));
10. Excel操作工具 - ExcelUtil
// 读取Excel
List<User> users = ExcelUtil.getReader("/path/users.xlsx").readAll(User.class);
// 写入Excel
ExcelWriter writer = ExcelUtil.getWriter("/path/output.xlsx");
writer.write(users, true);
writer.close();
三、特色工具类
11. 缓存工具 - CacheUtil
TimedCache<String, String> cache = CacheUtil.newTimedCache(1000 * 60);
cache.put("key", "value", 1000 * 30); // 30秒过期
String value = cache.get("key");
12. 定时任务工具 - CronUtil
CronUtil.schedule("0 0/5 * * * ?", (Runnable) () -> {
System.out.println("每5分钟执行一次");
});
CronUtil.start();
13. 验证码工具 - CaptchaUtil
// 生成图形验证码
LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100);
captcha.write("/path/captcha.png");
// 验证码校验
boolean valid = captcha.verify("userInput");
14. 系统信息工具 - OshiUtil
SystemInfo si = OshiUtil.getSystemInfo();
System.out.println("CPU使用率: " + si.getHardware().getProcessor().getSystemCpuLoad());
System.out.println("内存总量: " + si.getHardware().getMemory().getTotal());
四、使用建议
-
按需引入:
<!-- 只引入所需模块 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-http</artifactId> <version>5.8.12</version> </dependency>
-
避免滥用:对于简单操作,优先使用JDK原生方法
-
性能敏感场景:注意工具类的性能开销(如频繁IO操作)
-
异常处理:虽然工具类封装了异常,但关键操作仍需处理异常
五、最佳实践场景
场景 | 推荐工具类 | 优势 |
---|---|---|
REST API开发 | HttpUtil + JSONUtil | 简化HTTP请求和JSON处理 |
数据处理 | CollUtil + BeanUtil | 简化集合操作和对象转换 |
文件操作 | FileUtil + IoUtil | 简化文件读写和流操作 |
定时任务 | CronUtil + ThreadUtil | 轻量级定时任务管理 |
系统监控 | OshiUtil + SystemUtil | 获取系统运行时信息 |
Hutool通过封装常用操作,使Java开发更高效优雅。但需注意:工具类不是万能的,理解底层原理更重要。