# Java hutool 糊涂工具
# 1. 介绍
官网: https://doc.hutool.cn/pages/index/
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
| 模块 | 介绍 |
|---|---|
| hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
| hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
| hutool-cache | 简单缓存实现 |
| hutool-core | 核心,包括Bean操作、日期、各种Util等 |
| hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
| hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
| hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
| hutool-dfa | 基于DFA模型的多关键字查找 |
| hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
| hutool-http | 基于HttpUrlConnection的Http客户端封装 |
| hutool-log | 自动识别日志实现的日志门面 |
| hutool-script | 脚本执行封装,例如Javascript |
| hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
| hutool-system | 系统参数调用封装(JVM信息等) |
| hutool-json | JSON实现 |
| hutool-captcha | 图片验证码实现 |
| hutool-poi | 针对POI中Excel和Word的封装 |
| hutool-socket | 基于Java的NIO和AIO的Socket封装 |
| hutool-jwt | JSON Web Token (JWT)封装实现 |
| hutool-ai | AI大模型封装实现 |
依赖:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.40</version>
</dependency>
# 2. RandomUtil
# 2.1. 生成 6 位数字验证码
import cn.hutool.core.util.RandomUtil;
// 6 位数字验证码
String captcha = RandomUtil.randomNumbers(6);
# 2.2. 生成名称随机字符串
import cn.hutool.core.util.RandomUtil;
// 首次注册,生成的用户昵称
String nickname = "user_" + RandomUtil.randomString(6);
# 3. UUID
# 3.1. 生成随机 token
// true - 不带中划线的 UUID
String token = UUID.randomUUID().toString(true);
# 4. BeanUtil
# 4.1. 拷贝 bean 中属性
// 将 user 里的属性拷贝到 新建的UserDTO 并返回
UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);
// 忽略一些属性
String[] ignoredProps = { 'id', 'age' };
UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class, ignoredProps);
// 针对有泛型的 Map, 直接使用 Map.class 作为参数会报泛型警告
Map<String, Object> srcRecord = new HashMap<>();
Map<String, Object> targetRecord = new HashMap<>();
BeanUtil.copyProperties(srcRecord, targetRecord)
# 4.2. 拷贝 list
// 1.查询出 PO list
List<User> users = userService.listByIds(ids);
// 2.将 PO list 转 VO list
List<UserVO> userVoList = BeanUtil.copyToList(users, UserVO.class);
# 4.3. bean 转 Map
Map<String, Object> userMap = BeanUtil.beanToMap(userDTO);
// 自定义转换选项
CopyOptions copyOptions = CopyOptions.create()
.setIgnoreNullValue(true)
// 将 值 转为 字符串
.setFieldValueEditor((fieldName, fieldValue) -> fieldValue.toString());
Map<String, Object> userMap = BeanUtil.beanToMap(userDTO, new HashMap<>(), copyOptions);
# 4.4. Map 转 bean
// false - 不忽略错误
UserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);
# 5. StrUtil
# 5.1. 判断字符串是否有值
String token = '123';
boolean b = StrUtil.isEmpty(token);
# 5.2. 判断对象是否为空白字符串
Object token = '123';
boolean b = StrUtil.isBlankIfStr(token);
# 5.3. 字符串模板
// 使用StrUtil的format方法格式化字符串
String result = StrUtil.format("Hello, {}! Welcome to {}.", "World", "Hutool");
# 6. CollectionUtil (废弃)
# 6.1. 集合是否为空
CollectionUtil.isEmpty(userMap)
# 7. CollUtil
# 7.1. 判断集合是否为空
CollUtil.isEmpty(userMap)
# 8. JSONUtil
# 8.1. json 转 bean
Shop shop = JSONUtil.toBean(shopJsonStr, Shop.class);
# 8.2. bean 转 json
String showJsonStr = JSONUtil.toJsonStr(shop);
// 格式化日期类型的属性
JSONConfig jsonConfig = new JSONConfig();
jsonConfig.setDateFormat(DatePattern.NORM_DATETIME_PATTERN);
String showJsonStr = JSONUtil.toJsonStr(shop, jsonConfig);
# 8.3. json 转 List
List<User> list = JSONUtil.toList(str, User.class);
# 8.4. 是否为数组 json 字符串
// 是否为 JSONArray 类型的字符串,首尾都为中括号判定为 JSONArray 字符串
boolean isValidArrayJson = JSONUtil.isTypeJSONArray(str);
# 9. DateUtil
# 9.1. 当前日期加 1 秒
Date createDate = DateUtil.offset(new Date(), DateField.SECOND, 1).toJdkDate();
# 9.2. 格式化日期
// arg1: LocalDateTime | Date
String dateStr = DateUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_PATTERN);
// -- 参考
public class DatePattern {
/**
* 标准日期格式:yyyy-MM-dd
*/
public static final String NORM_DATE_PATTERN = "yyyy-MM-dd";
/**
* 标准日期时间格式,精确到秒:yyyy-MM-dd HH:mm:ss
*/
public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
// ...
}
# 10. BooleanUtil
# 10.1. 检查 Boolean 值是否为 true
BooleanUtil.isTrue(Boolean.TRUE) = true
BooleanUtil.isTrue(Boolean.FALSE) = false
BooleanUtil.isTrue(null) = false
# 11. FileUtil
# 11.1. 根据 文件名或路径 获取 MIME
String fileName = "test.jpg";
String mimeType = FileUtil.getMimeType(fileName);
System.out.println(mimeType); // 输出:image/jpeg
# 11.2. 修复路径
/*
如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留
1. 统一用 /
2. 多个 / 转换为一个 /
3. 去除左边空格
4. .. 和 . 转换为绝对路径,当..多于已有路径时,直接返回根路径
"/foo//" => "/foo/"
"/foo/./" => "/foo/"
"/foo/../bar" => "/bar"
"/foo/../bar/" => "/bar/"
"/foo/../bar/../baz" => "/baz"
*/
FileUtil.normalize(String path)
# 11.3. 遍历目录下所有文件
/*
递归遍历目录以及子目录中的所有文件
如果用户传入相对路径,则是相对classpath的路径
如:"test/aaa"表示"${classpath}/test/aaa"
*/
List<File> fileList = FileUtil.loopFiles("D:/dev");
# 11.4. 参考
# 12. CharsetDetector
# 12.1. 弹出文件的字符集
InputStream minIoObject = minioUtils.readMinioObjectFileStream(minIoObjectName);
Charset fileCharset = CharsetDetector.detect(minIoObject);
// 如果 in 不是“合法”的 InputStream,可以使用 ByteArrayInputStream
byte[] body = IOUtils.toByteArray(minIoObject);
fileCharset = CharsetDetector.detect(new ByteArrayInputStream(body));
// fileCharset.toString()
# 13. ListUtil
# 13.1. 截取 List
// 包头,不包尾;返回副本
ListUtil.sub(list, 1, 3);
# 14. DataSizeUtil
# 14.1. 字节数转 KB/MB
Long b=1L;
Long kb=1024L;
Long mb=1048576L;
Long gb=1073741842L;
Long tb=1099511627776L;
System.out.println(DataSizeUtil.format( b)); //=> "1 B"
System.out.println(DataSizeUtil.format( kb)); //=> "1 KB"
System.out.println(DataSizeUtil.format( mb)); //=> "1 MB"
System.out.println(DataSizeUtil.format( gb)); //=> "1 GB"
System.out.println(DataSizeUtil.format( tb)); //=> "1 TB"
# 15. Base64
# 15.1. 解码 base64 字符串
String str = Base64.decodeStr(base64Str);
# 16. ResourceUtil
# 16.1. 读取 Resource 目录下的文件
// 找不到资源抛异常
InputStream inputStream1 = ResourceUtil.getStream("classpath:application.yml");
// "classpath:" 可以省略
InputStream inputStream2 = ResourceUtil.getStream("application.yml");
// 找不到资源返回 null
InputStream inputStream3 = ResourceUtil.getStreamSafe("application.yml");
# 17. NumberUtil
# 17.1. string 转 int/long/double
NumberUtil.parseInt("1.56"); //=> 1
NumberUtil.parseDouble("1"); //=> 1.0
# 18. ObjectUtil
# 18.1. 判断 多个对象 是否存在 null
ObjectUtil.hasNull(obj1, obj2, ...)
上一篇: 下一篇:
本章目录