大聪明教你学Java | Hutool - A set of tools that keep Java sweet

Posted 不肯过江东丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大聪明教你学Java | Hutool - A set of tools that keep Java sweet相关的知识,希望对你有一定的参考价值。

前言

无论在开发什么项目,我们都会用到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

本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇‍

如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。

你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西

以上是关于大聪明教你学Java | Hutool - A set of tools that keep Java sweet的主要内容,如果未能解决你的问题,请参考以下文章

大聪明教你学Java | Spring Boot 使用自定义注解实现操作日志的记录

大聪明教你学Java | Spring Boot 项目设置 X-Content-Type-Options 响应头

大聪明教你学Java | Log4j 漏洞到底是怎么一回事?Log4j 2.15.0 也不靠谱了...

太白教你学python---博客分类目录

三分钟教你学Git(十四) 之 线下传输仓库

阿里P8大佬3分钟带你学完Java锁