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:ss
  • yyyy-MM-dd
  • HH:mm:ss
  • yyyy-MM-dd HH:mm
  • yyyy-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

图片工具

HutoolImgUtil 可以对图片进行缩放、裁剪、黑白、加水印等操作。

缩放图片:

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  
);