前言
无论在开发什么项目,我们都会用到N多种工具类,DateUtils、FileUtils、StringUtils等等… 开发一个新项目就需要把这些“轮子”复制一次,虽然只是Ctrl+C/V,但是也麻烦了一些,而且也会让我们的Utils包显得贼臃肿😔
那么怎么解决这个问题呢?稍安勿躁,接下来就该请我们的主角闪亮登场了(●’◡’●) —— Hutool - A set of tools that keep Java sweet
在Hutool官网中有这么一段话:
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当。
引入Hutool
Maven项目引入Hutool是非常简单的,直接在项目的pom.xml的dependencies中加入👇即可
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.16</version>
</dependency>
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少。
以前在开发的时候我们总是打开百度搜XXX工具类,在一篇博客中找到自己所需的代码复制粘贴,然后修修补补让它变得更好用;现在有了Hutool,我们只需要直接使用就ok了,是不是很简单O(∩_∩)O
下面就介绍一下开发中经常用到的一些工具类~
P.S. 其实是因为Hutool中包含的工具太多了,我实在是写不下来(✿◡‿◡)
日期工具类
JDK中自带的Date工具不太好用,Hutool的日期工具类用起来就方便多了
先来个获取当前日期
public static void main(String[] args) {
Date date = DateUtil.date();
System.out.println("date = " + date);
}
我们会发现它直接返回的是yyyy-MM-dd HH:mm:ss格式的日期,我们看一下date()方法的源码
date()方法返回的其实是DateTime,它继承自 Date 对象,重写了toString() 方法,返回 yyyy-MM-dd HH:mm:ss 格式的字符串。
咱们再试试字符串转日期:
parse()方法会自动识别一些常用的格式,比如说:
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd
- HH:mm:ss
- yyyy-MM-dd HH:mm
最人性化的一点是,它可以识别中文格式:年月日时分秒
public static void main(String[] args) {
String dateStr = "2021年11月22日 10时32分07秒";
Date date = DateUtil.parse(dateStr);
System.out.println("date = " + date);
}
再来说说计算时间差
public static void main(String[] args) {
String dateStr1 = "2021-11-22 10:32:07";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2021-11-22 10:44:34";
Date date2 = DateUtil.parse(dateStr2);
long betweenDay = DateUtil.between(date1, date2, DateUnit.MS);
String formatBetween = DateUtil.formatBetween(betweenDay, BetweenFormatter.Level.SECOND);
System.out.println("formatBetween = " + formatBetween);
}
输入:formatBetween = 12分27秒
再说一个有意思的功能,给定一个日期,可以输出生肖和星座😄
我是1996年9月11日出生的,就用我的出生日期来测试一下
public static void main(String[] args) {
String zodiac = DateUtil.getZodiac(9, 11);
System.out.println("zodiac = " + zodiac);
String chineseZodiac = DateUtil.getChineseZodiac(1996);
System.out.println("chineseZodiac = " + chineseZodiac);
}
P.S. 这里需要注意一下哦~ DateUtil.getZodiac()方法中月份是从0开始计算的,月份参数输入的9,其实代表的是10月,所以就需要改成DateUtil.getZodiac(8, 11) 才会获取生日为9月11号的星座~
字符串工具类
Hutool中的字符串工具类StrUtil和Apache Commons Lang包中的StringUtils就比较类似了,这里就说一个比较有意思的方法
public static void main(String[] args) {
String template = "我叫{},我在{}市";
String str = StrUtil.format(template, "liziye", "石家庄");
System.out.println("str = " + str);
}
不知道有没有小伙伴觉得这个功能有点眼熟~ 是不是短信接口模板挺像的😄
类型转换工具类
类型转换在Java开发中很常见,就比如说从HttpRequest中获取参数的时候,前端页面传递的是整型,但后端只能先获取到字符串,然后再调用 parseXXX() 方法进行转换,还要在加上校验、判空,就很繁琐。
Hutool的Convert类可以简化这个操作,可以将任意可能的类型转换为指定类型。以转换Int型参数为例,Convert.toInt(Object value, Integer defaultValue)方法有两个参数,第一个参数就不用说了,传递的是待转换参数,第二个参数的含义是:在转换失败时返回一个给定的默认值。(第二个参数可有可无)
我们再来模拟一下转换失败的情况
public static void main(String[] args) {
String param = "qweqweqeqwe";
int paramIntDefault = Convert.toInt(param, 0);
System.out.println("paramIntDefault = " + paramIntDefault);
}
流操作工具类
IO 操作包括读和写,应用的场景主要包括网络操作和文件操作,原生的 Java类库区分字符流和字节流,字节流InputStream和OutputStream就有N多种,用的时候真是头疼。
Hutool封装了流操作工具类IoUtil、文件读写操作工具类FileUtil、文件类型判断工具类FileTypeUtil等等,让流操作边得更简单更容易。(这里就不作代码演示了,这演示起来就多了😂原谅我想偷个懒)
校验工具类
在开发的时候避免不了有表单的存在,后端通常需要对表单提交过来的数据进行验证。Hutool封装的Validator类可以进行很多有效的条件验证,比如是不是邮箱、是不是手机号码、是不是中文…
解压缩工具
在Java中,对文件、文件夹进行压缩是一件很繁琐的事情,Hutool封装的 ZipUtil工具就极大的降低了解压缩的复杂度,可以使用一个方法搞定压缩和解压缩,并且自动处理文件和目录的问题。
ZipUtil.zip(String srcPath, String zipPath)
ZipUtil.unzip(String zipFilePath, @Nullable String outFileDir)
控制台打印
开发的过程中经常需要使用System.out打印结果,但是一些复杂的对象不支持直接打印,比如说打印数组的时候就需要先用toString方法转换为字符串再进行打印。
Hutool 封装的Console类借鉴了JS中的 console.log(),让打印也变成了一件非常简单的事。
public static void main(String[] args) {
// 打印字符串
Console.log("我在人民广场吃着炸鸡~");
// 打印字符串模板
Console.log("我在{}吃着炸鸡","人民广场");
String [] str = {"我","在","人民广场","吃着","炸鸡"};
// 打印数组
Console.log(str);
}
日志工具
Hutool封装的日志工厂LogFactory兼容了各大日志框架,使用起来也非常简便。
/**
* @program: HuTool工具类演示
* @description: HuToolTest
* @author: 庄霸.liziye
* @create: 2021-11-22 10:29
**/
public class HuToolTest {
private static final Log log = LogFactory.get();
public static void main(String[] args) {
log.debug("我在人民广场吃着炸鸡");
log.info("我在人民广场吃着炸鸡");
}
}
如果不想创建Log对象的话,也可以使用StaticLog(一个提供了静态方法的日志类)
小结
Hutool中的类库还有很多,尤其是一些对第三方类库的进一步封装,比如邮件工具 MailUtil,二维码工具 QrCodeUtil,缓存工具CacheUtil ,图片工具ImgUtil等等,本文就是简单的介绍一下Hutool,让各位小伙伴对其有一个初步的了解,如果想深入学习Hutool,请移步至 Hutool官网 O(∩_∩)O
本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇
如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。
你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西