Hutool——国产良心工具包

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool的使用
想要使用 Hutool,只需要引入 pom.xml:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.3</version>
</dependency>
功能介绍

类型转换
将参数转换为int类型,并赋予默认值:
String param = "10";
int paramInt = Convert.toInt(param);
param = null;
int paramIntDefault = Convert.toInt(param, 0); // 0
System.out.println(paramInt);
System.out.println(paramIntDefault);
将参数转换为日期:
String dateStr = "2024年12月20日";
Date date = Convert.toDate(dateStr);
System.out.println(date);
日期时间
Hutool 中自带一个日期工具 DateUtil
获取当前日期
与普通的 new Date() 创建的Date对象不同的是,DateUtil 获取的对象重写的 toString() 方法,返回的是格式化后的字符串 yyyy-MM-dd HH:mm:ss
Date date = DateUtil.date();
System.out.println(date); // 2024-12-22 17:46:55
字符串转日期
DateUtil.parse() 可以识别一些常用的时间格式,如:
yyyy-MM-dd HH:mm:ssyyyy-MM-ddHH:mm:ssyyyy-MM-dd HH:mmyyyy-MM-dd HH:mm:ss.SSS年月日时分秒
String dateStr = "2024-12-22 18:18:00";
Date date1 = DateUtil.parse(dateStr);
System.out.println(date1); // 2024-12-22 18:18:00
String dateStr2 = "2024年12月23日 10:25:25";
Date date2 = DateUtil.parse(dateStr2);
System.out.println(date2); // 2024-12-23 10:25:25
格式化时间差
String dateStr1 = "2024年12月21日 10:28:59";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2024年12月23日 23:30:44";
Date date2 = DateUtil.parse(dateStr2);
long betweenDay = DateUtil.between(date1, date2, DateUnit.MS);
System.out.println(betweenDay); // 219705000
String s = DateUtil.formatBetween(betweenDay, BetweenFormatter.Level.SECOND);
System.out.println(s); // 2天13小时1分45秒
星座
String zodiac = DateUtil.getZodiac(Month.DECEMBER.getValue(), 10);
System.out.println(zodiac); // 射手座
String chineseZodiac = DateUtil.getChineseZodiac(2005);
System.out.println(chineseZodiac); // 坤
IO相关
关于IO:IO流
Hutool 封装了流操作工具类 IoUtil、文件读写工具类 FileUtil、文件判断工具类 FileTypeUtil
其中,用的最多的就是 FileUtil,其主要操作如下:
- 文件操作:包括文件目录的新建、删除、复制、移动、改名等
- 文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等
- 绝对路径:针对 ClassPath 中的文件转换为绝对路径文件
- 文件名:主文件名,扩展名的获取
- 读操作:包括 getReader、readXXX 操作
- 写操作:包括 getWriter、writeXXX 操作
字符串工具
Hutool 的 StrUtil 也就是字符串工具,其实和 StringUtils 非常相似,比如:
String[] strs = new String[]{"hello", "world"};
String join = StringUtils.join(strs, " ");
System.out.println(join);
join = StrUtil.join(" ", strs);
System.out.println(join);
结果均为: Hello World
反射工具
反射 可以更加灵活使用 Java,Hutool 封装了反射工具 ReflectUtil,其主要方法:
- 获取构造方法
- 获取字段
- 获取字段值
- 获取方法
- 执行方法(对象方法和静态方法)
public class ReflectTest {
private int id;
public ReflectTest() {
System.out.println("构造方法");
}
public void print() {
System.out.println("print");
}
@Test
public void test01() throws IllegalAccessException {
// 构造对象
ReflectTest reflectTest = ReflectUtil.newInstance(ReflectTest.class);
System.out.println(reflectTest);
// 获取构造方法
Constructor<ReflectTest>[] constructors = ReflectUtil.getConstructors(ReflectTest.class);
for (Constructor<ReflectTest> constructor : constructors) {
System.out.println(constructor.getName());
}
// 获取字段
Field field = ReflectUtil.getField(ReflectTest.class, "id");
field.setInt(reflectTest, 10);
// 获取字段值
System.out.println(ReflectUtil.getFieldValue(reflectTest, "id"));
// 获取所有方法
Method[] methods = ReflectUtil.getMethods(ReflectTest.class);
for (Method method : methods) {
System.out.println(method.getName());
}
// 获取指定方法
Method method = ReflectUtil.getMethod(ReflectTest.class, "print");
System.out.println(method.getName());
// 执行方法
ReflectUtil.invoke(reflectTest, "print");
}
}
压缩工具
Hutool 优化了 Java 原先的 java.util.zip,并简化了操作流程,如下:
ZipUtil.zip("test", "test.zip");
ZipUtil.unzip("test.zip", "testzip");
List<String> strings = FileUtil.readLines("testzip/test.txt", "utf-8");
for (String string : strings) System.out.println(string);
身份证工具
使用 IdcardUtil 可以快速的判断身份证信息
String ID_18 = "321083197812162119";
String ID_15 = "150102880730303";
System.out.println(IdcardUtil.isValidCard(ID_18)); // true
System.out.println(IdcardUtil.isValidCard(ID_15)); // true
扩展HashMap
使用 Hutool 中的 Dict 可以避免,HashMap强类型的特性,如下:
Dict dict = Dict.create()
.set("age", 19)
.set("name", "zxb")
.set("createdTime", DateTime.now());
Integer age = dict.getInt("age");
System.out.println(age); // 19
String name = dict.getStr("name");
System.out.println(name); // zxb
控制台打印
本地编码的过程中,经常需要使用 System.out 打印结果,但是往往一些复杂的对象不支持直接打印,比如说数组,需要调用 Arrays.toString。Hutool 封装的 Console 类借鉴了 JavaScript 中的 console.log(),使得打印变成了一个非常便捷的方式。
// 打印字符串
Console.log("this is a test text");
// 打印字符串模板
Console.log("今天是周{}", "二 ");
// 打印数组
int[] ints = {1, 2, 3, 4};
Console.log(ints);
字段验证器
对于开发 SpringMVC 的,应该比较熟悉前端,Hutool 封装的 Validator 可以进行很多有效的条件验证:
- 是不是邮箱
- 是不是 IP V4、V6
- 是不是电话号码
- 等等

System.out.println(Validator.isEmail("asb@hjl.com")); // true
System.out.println(Validator.isMobile("13812345678")); //true
双向查找Map
Hutool 提供了一种Map,名为 BiMap,既可以通过 key 查询 value,亦可以通过 value 查询 key
BiMap<Integer, String> biMap = new BiMap<>(new HashMap<>());
biMap.put(0, "zxb");
biMap.put(1, "bxz");
// get value by key
System.out.println(biMap.get(0)); // zxb
System.out.println(biMap.get(1)); // bxz
// get key by value
System.out.println(biMap.getKey("zxb")); // 0
System.out.println(biMap.getKey("bxz")); // 1
图片工具
Hutool 的 ImgUtil 可以对图片进行缩放、裁剪、黑白、加水印等操作。
缩放图片:
ImgUtil.scale(
FileUtil.file("test.jpg"),
FileUtil.file("testScale.jpg"),
0.5f
);
裁剪图片:
ImgUtil.cut(
FileUtil.file("test.jpg"),
FileUtil.file("test_cut.jpg"),
new Rectangle(200, 200 ,100, 100)
);
添加水印:
ImgUtil.pressText(
FileUtil.file("test.jpg"),
FileUtil.file("test_logo.jpg"),
"测试", Color.BLUE,
new Font("黑体", Font.BOLD, 100),
0,
0,
0.8f
);
- 感谢你赐予我前进的力量

