资讯专栏INFORMATION COLUMN

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

Ververica / 1376人阅读

摘要:打印字符串我在人民广场吃着炸鸡打印字符串模板我在吃着炸鸡人民广场我在人民广场吃着炸鸡打印数组日志工具封装的日志工厂兼容了各大日志框架,使用起来也非常简便。

前言

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124436.html

相关文章

  • Java实战之文章翻译:Better Java —— 教你如何编写现代化的Java程式

    摘要:特别是在可能返回空的集合的情况下务必返回一个内容为空的集合而不是一个。对于集合类型,应该在任何允许的情况下使用的或者类。框架框架是你部署代码的一个很好地方式,其中较好的选择有与。包含了大量与文件相关的操作。 原文地址:这里 Java是目前世界上最流行的编程语言之一,但是并不是所有人都乐于使用它。不过Java其实是一个还不错的语言,也别是自从Java 8正式发布之后,所以我决定将我的一些...

    godruoyi 评论0 收藏0
  • java 获取视频第一帧 | Java工具类

    摘要:目录前言前言环境依赖环境依赖代码代码总结总结前言本文提供提取视频文件的第一帧工具类。其中包括从下载视频的策略。说明一下该参数表示输出的图片只有张。 目录 前言 环境依赖 代码 总结 前言 本文提供提取mp4视频文件的第一帧java工具类。其中包括从url下载视频的策略。 环境依赖 Mav...

    klivitamJ 评论0 收藏0
  • JavaScript Testing

    Testing framework both use describe, it functions Jasmine(Behavior-Driven JavaScript) spyOn(User, save) jasmine.createSpy() the Jasmine framework has almost everything built into it including assertio...

    Eric 评论0 收藏0
  • 使用混淆ProGuard压缩代码和资源/减少方法数量

    摘要:同时还可优化字节码,移除未使用的代码指令,以及用短名称混淆其余的类字段和方法。使用可以进一步的压缩代码还包括其他在字节码一级方法内和方法间执行分析的优化,可进一步减小大小和帮助提高其运行速度。ProGuard介绍 ProGuard是一个Java类文件压缩器,优化器,混淆器和预先文件验证器。 压缩步骤检测和删除未使用的类,字段,方法和属性。 优化步骤分析和优化方法的字节码。 混淆步骤使用短无意...

    番茄西红柿 评论0 收藏0
  • Python遗传算法框架DEAP-Operators and Algorithms

    摘要:打印出个体检查它的适应度是否有效这个个体打印出来了。这个适应度值是通过设置值和元祖关联。适应度值被删除了,因为它们不再和这个个体相关了因为变异了嘛。如上面所述,这个变异算子只是变异并且只是变异一个个体,它也不对适应度的无效负责或者其它。 Before starting with complex algorithms, we will see some basics of DEAP. F...

    fantix 评论0 收藏0

发表评论

0条评论

Ververica

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<