Java常用工具类库——Hutool的使用简介

作者:码农翻身 时间:2022-09-27 18:24:45 

目录
  • 前言

  • HuTool 中的一些常用工具类

    • 日期相关 API

    • 随机工具

    • 图片工具

      • 彩色转换成黑白

      • 添加文字水印

    • 加密解密工具

      • 布隆过滤器

        • 邮件工具

          • HTML 工具

            • HtmlUtil.cleanHtmlTag

            • HtmlUtil.removeHtmlTag

            • 过滤 HTML 文本,防止 XSS 攻击

          • JSON 工具

          • 写在最后

            前言

            Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。
            Hutool 中的工具方法来自于每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
            Hutool 是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的 bug。

            上述是 Hutool 的官方介绍,它的官方文档已经介绍的很详细了,因此下面我只简单介绍几个常用的 API 操作,更多的功能我们可以详细阅读文档。

            官方文档地址:https://www.hutool.cn/docs/#/

            HuTool 中的一些常用工具类

            我们引入这个工具类很简单,直接在 Mavan 项目中引入 dependency 即可,如果是初学者,去 Maven Repository 下载 jar 包也可以使用。


            <dependency>
               <groupId>cn.hutool</groupId>
               <artifactId>hutool-all</artifactId>
               <version>5.3.5</version>
            </dependency>

            通过 Hutool,可以减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。

            日期相关 API

            我们知道,Java 中关于日期的 API 使用一直很繁琐,从 Date 到 Calendar,对开发者都不是那么友好,还容易出 BUG,那么 Hutool 首先就对日期下手了,提供了针对 JDK 中 Date 和 Calendar 对象的封装。

            比如要对当前的 Date 日期进行格式化,一般使用 SimpleDateFormat(yyyy-MM-dd HH:mm:ss) 这种方式,但 SimpleDateFormat 这个类是线程不安全的,而 Hutool 提供了一个 FastDateFormat 类,提供线程安全的针对 Date 对象的格式化和日期字符串解析支持。此对象在实际使用中并不需要感知,相关操作已经封装在 DateUtil 和 DateTime 的相关方法中。

            还有其它的日期 API 如下:

            • DateUtil 针对日期时间操作提供一系列静态方法

            • DateTim 提供类似于 Joda-Time 中日期时间对象的封装,继承自 Date 类,并提供更加丰富的对象方法。

            • DateBetween 计算两个时间间隔的类,除了通过构造新对象使用外,相关操作也已封装在 DateUtil 和 DateTime 的相关方法中。

            • TimeInterval 一个简单的计时器类,常用于计算某段代码的执行时间,提供包括毫秒、秒、分、时、天、周等各种单位的花费时长计算,对象的静态构造已封装在 DateUtil 中。

            • DatePattern 提供常用的日期格式化模式,包括 String 类型和 FastDateFormat 两种类型。

            随机工具

            随机工具应该是我们开发中用的较多的类库,Hutool 也封装了常用的 API。

            • RandomUtil.randomInt 获得指定范围内的随机数

            • RandomUtil.randomBytes 随机 bytes

            • RandomUtil.randomEl 随机获得列表中的元素

            • RandomUtil.randomEleSet 随机获得列表中的一定量的不重复元素,返回 Set

            • RandomUtil.randomString 获得一个随机的字符串(只包含数字和字符)

            • RandomUtil.randomNumbers 获得一个只包含数字的字符串

            • RandomUtil.randomUUID 随机 UUID

            • RandomUtil.weightRandom 权重随机生成器,传入带权重的对象,然后根据权重随机获取对象

            图片工具

            针对 awt 中图片处理进行封装,这些封装包括:缩放、裁剪、转为黑白、加水印等操作。

            彩色转换成黑白


            //黑白转换
            ImgUtil.gray(FileUtil.file("d:/logo.png"), FileUtil.file("d:/result.png"));

            添加文字水印


            ImgUtil.pressText(//
               FileUtil.file("e:/pic/face.jpg"), //
               FileUtil.file("e:/pic/test2_result.png"), //
               "版权所有", Color.WHITE, //文字
               new Font("黑体", Font.BOLD, 100), //字体
               0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
               0, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
               0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
            );

            加密解密工具

            加密一般分为三种:

            1. 对称加密(symmetric),例如:AES、DES等

            2. 非对称加密(asymmetric),例如:RSA、DSA等

            3. 摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等

            Hutool 对上述加密都提供了对应的封装方法。

            布隆过滤器

            布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。一般用于解决 NoSQL 的缓存穿透问题。


            // 初始化
            BitMapBloomFilter filter = new BitMapBloomFilter(10);
            filter.add("123");
            filter.add("abc");
            filter.add("ddd");

            // 查找
            filter.contains("abc")

            邮件工具

            在 Java中 发送邮件主要品依靠 javax.mail 包,原生 API 使用比较繁琐,Hutool 在支持邮件发送的基础上,仍然依赖于 javax.mail 包。


            <dependency>
               <groupId>javax.mail</groupId>
               <artifactId>mail</artifactId>
               <version>1.4.7</version>
            </dependency>

            邮件服务器的完整配置:


            # 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
            host = smtp.yeah.net
            # 邮件服务器的SMTP端口,可选,默认25
            port = 25
            # 发件人(必须正确,否则发送失败)
            from = hutool@yeah.net
            # 用户名,默认为发件人邮箱前缀
            user = hutool
            # 密码(注意,某些邮箱需要为SMTP服务单独设置授权码,详情查看相关帮助)
            pass = q1w2e3

            发送邮件:

            • 发送普通文本邮件,最后一个参数可选是否添加多个附件:


            //普通文本
            MailUtil.send("hutool@foxmail.com", "测试", "邮件来自Hutool测试", false);
            • 发送 HTML 格式的邮件并附带附件,最后一个参数可选是否添加多个附件:


            //带HTML格式的邮件
            MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/aaa.xml"));
            • 群发邮件,可选 HTML 或普通文本,可选多个附件:


            //群发
            ArrayList<String> tos = CollUtil.newArrayList(
               "person1@bbb.com",
               "person2@bbb.com",
               "person3@bbb.com",
               "person4@bbb.com");

            MailUtil.send(tos, "测试", "邮件来自Hutool群发测试", false);

            HTML 工具

            比如清除富文本编辑器中的 HTML 文本的指定标签,或者只保留普通文本。

            HtmlUtil.cleanHtmlTag

            清除所有 HTM L标签,但是保留标签内的内容。


            String str = "pre<div class=\"test_div\">\r\n\t\tdfdsfdsfdsf\r\n</div><div class=\"test_div\">BBBB</div>";

            // 结果为:pre\r\n\t\tdfdsfdsfdsf\r\nBBBB
            String result = HtmlUtil.cleanHtmlTag(str);

            HtmlUtil.removeHtmlTag

            清除指定HTML标签和被标签包围的内容


            String str = "pre<img src=\"xxx/dfdsfds/test.jpg\">";

            // 结果为:pre
            String result = HtmlUtil.removeHtmlTag(str, "img");

            过滤 HTML 文本,防止 XSS 攻击

            这个作用就不必多说,防止用户在输入文本中写入 HTML 标签对后台造成攻击。


            String html = "<alert></alert>";

            // 结果为:""
            String filter = HtmlUtil.filter(html);

            JSON 工具

            由于有开源并且一直在维护的 Fastjson 工具在先,所以这里就不再细说 Hutool 中的 JSON 工具,使用方法基本类似。

            写在最后

            上面只是简单的介绍了 Hutool 的典型常用工具,实际上 Hutool 基本覆盖了我们日常普通开发场景涉及的大部分工具类,有兴趣的可以自行查阅文档,介绍的很全,如果使用中遇到了 BUG,也欢迎及时向作者反馈哦🙋 。

            来源:https://bestzuo.cn/posts/hutool.html

            标签:Java,工具类库,Hutool
            0
            投稿

            猜你喜欢

          • @GrpcServise 注解的作用和使用示例详解

            2021-07-25 21:12:25
          • SpringBoot+Shiro+LayUI权限管理系统项目源码

            2021-07-13 16:35:19
          • Spring Boot2.x集成JPA快速开发的示例代码

            2022-11-21 04:55:41
          • android实现蓝牙文件发送的实例代码,支持多种机型

            2023-08-17 11:07:56
          • Android中 视频屏幕左半部分上下滑动改变亮度右半部分上下滑动改变声音

            2021-08-13 02:57:12
          • 浅谈一下单体架构的缺点是什么

            2022-07-16 06:20:12
          • java WSDL接口webService实现方式

            2022-06-15 21:03:29
          • java开发之闹钟的实现代码

            2021-07-08 12:46:49
          • Unity实现简单虚拟摇杆

            2023-08-04 17:33:09
          • Android录音功能的实现以及踩坑实战记录

            2022-01-06 14:03:29
          • Android布局技巧之使用ViewStub

            2023-03-22 06:34:10
          • java 对象输入输出流读写文件的操作实例

            2021-06-13 15:24:30
          • java WebSocket 服务端实现代码

            2022-09-28 00:30:52
          • Jetpack Compose修饰符专项精讲

            2021-11-28 06:33:21
          • Android开发必备:秒杀真机超快模拟器Genymotion介绍

            2021-06-22 03:00:17
          • IDEA 端口占用的解决方法(推荐)

            2023-09-05 06:05:15
          • 浅谈java的接口和C++虚类的相同和不同之处

            2023-08-05 12:01:51
          • Java聊天室之实现一个服务器与多个客户端通信

            2021-06-03 11:34:45
          • java方法重写实例分析

            2022-01-10 02:51:14
          • 当用户退出点击浏览器后退仍可回到原来页面的解决方案

            2023-07-22 08:33:45
          • asp之家 软件编程 m.aspxhome.com