当前位置: 首页 > article >正文

Hutool - Extra:功能丰富的扩展模块

一、简介

Hutool - Extra 作为 Hutool 工具包的扩展模块,对众多第三方库和功能进行了封装,极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面,为开发者在不同场景下提供了便捷的解决方案,让开发者无需深入了解各个第三方库的复杂细节,只需调用简单的 API 即可实现相应功能。

二、具体功能及使用示例
1. 模板引擎封装

模板引擎常用于生成动态内容,如 HTML 页面、邮件模板等。Hutool - Extra 对常见的模板引擎进行了封装,以 Freemarker 为例:

引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 Freemarker 和 Hutool 的依赖:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>

代码示例

import cn.hutool.extra.template.Engine;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateUtil;
import java.util.HashMap;
import java.util.Map;public class FreemarkerExample {public static void main(String[] args) {// 创建模板配置TemplateConfig config = new TemplateConfig();config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);// 获取模板引擎Engine engine = TemplateUtil.createEngine(config);// 获取模板Template template = engine.getTemplate("test.ftl");// 准备数据Map<String, Object> data = new HashMap<>();data.put("name", "John");// 渲染模板String result = template.render(data);System.out.println(result);}
}

在上述代码中,首先创建了模板配置对象,指定资源模式为从类路径加载模板。然后使用 TemplateUtil.createEngine 方法获取模板引擎,通过引擎获取指定名称的模板。准备好数据后,调用 render 方法将数据填充到模板中,得到最终的渲染结果。

2. 邮件发送

Hutool - Extra 封装了 JavaMail 实现邮件发送功能,简化了邮件发送的流程。

引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 JavaMail 和 Hutool 的依赖:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>

代码示例

import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;public class MailExample {public static void main(String[] args) {// 配置邮件账户MailAccount account = new MailAccount();account.setHost("smtp.example.com");account.setPort(465);account.setAuth(true);account.setUser("your_email@example.com");account.setPass("your_password");account.setSslEnable(true);// 发送邮件String result = MailUtil.send(account, "recipient@example.com", "测试邮件", "这是一封测试邮件。", false);System.out.println(result);}
}

在这个示例中,首先创建了邮件账户配置对象,设置了邮件服务器的主机名、端口、认证信息等。然后使用 MailUtil.send 方法发送邮件,指定收件人、邮件主题、邮件内容等参数。

3. Servlet 处理

Hutool - Extra 提供了一些工具类来简化 Servlet 开发中的常见操作,如获取请求参数、处理响应等。

代码示例

import cn.hutool.extra.servlet.ServletUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/test")
public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数String param = ServletUtil.getParam(req, "param");// 设置响应内容类型resp.setContentType("text/html;charset=UTF-8");// 输出响应信息resp.getWriter().println("接收到的参数:" + param);}
}

在上述 Servlet 中,使用 ServletUtil.getParam 方法获取请求参数,然后设置响应内容类型并输出响应信息。

4. 二维码生成

Hutool - Extra 封装了 ZXing 库来生成二维码。

引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 ZXing 和 Hutool 的依赖:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version>
</dependency>

代码示例

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;public class QrCodeExample {public static void main(String[] args) throws Exception {// 二维码配置QrConfig config = new QrConfig(300, 300);// 生成二维码图片BufferedImage image = QrCodeUtil.generate("https://www.example.com", config);// 保存二维码图片File file = new File("qrcode.png");ImageIO.write(image, "png", file);}
}

在这个示例中,首先创建了二维码配置对象,指定了二维码的尺寸。然后使用 QrCodeUtil.generate 方法生成二维码的 BufferedImage 对象,最后将其保存为 PNG 图片。

5. Emoji 处理

Hutool - Extra 提供了 Emoji 相关的工具类,用于处理 Emoji 表情的编码、解码等操作。

代码示例

import cn.hutool.extra.emoji.EmojiUtil;public class EmojiExample {public static void main(String[] args) {String emojiStr = "😀😄😎";// 将 Emoji 转换为别名String aliasStr = EmojiUtil.toAlias(emojiStr);System.out.println("Emoji 转换为别名:" + aliasStr);// 将别名转换为 EmojiString emojiBack = EmojiUtil.toUnicode(aliasStr);System.out.println("别名转换为 Emoji:" + emojiBack);}
}

在上述代码中,使用 EmojiUtil.toAlias 方法将 Emoji 表情转换为别名,使用 EmojiUtil.toUnicode 方法将别名转换回 Emoji 表情。

6. FTP 操作

Hutool - Extra 封装了 Apache Commons Net 库来实现 FTP 操作,如上传、下载文件等。

引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 Apache Commons Net 和 Hutool 的依赖:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version>
</dependency>

代码示例

import cn.hutool.extra.ftp.Ftp;
import java.io.File;
import java.io.IOException;public class FtpExample {public static void main(String[] args) {Ftp ftp = new Ftp("ftp.example.com", 21, "username", "password");try {// 上传文件ftp.upload("/remote/path", new File("local/file.txt"));// 下载文件ftp.download("/remote/path/file.txt", new File("local/download.txt"));} catch (IOException e) {e.printStackTrace();} finally {ftp.close();}}
}

在这个示例中,创建了 Ftp 对象并连接到 FTP 服务器,然后使用 upload 方法上传文件,使用 download 方法下载文件,最后关闭 FTP 连接。

7. 分词功能

Hutool - Extra 集成了 HanLP 等分词库,提供了简单的分词功能。

引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 HanLP 和 Hutool 的依赖:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.3</version>
</dependency>

代码示例

import cn.hutool.extra.tokenizer.Result;
import cn.hutool.extra.tokenizer.TokenizerEngine;
import cn.hutool.extra.tokenizer.TokenizerUtil;public class TokenizerExample {public static void main(String[] args) {// 获取分词引擎TokenizerEngine engine = TokenizerUtil.createEngine();// 待分词的文本String text = "我爱自然语言处理";// 进行分词Result result = engine.parse(text);for (String word : result) {System.out.println(word);}}
}

在上述代码中,使用 TokenizerUtil.createEngine 方法获取分词引擎,然后对文本进行分词操作,遍历分词结果并输出每个词语。

三、注意事项
  • 依赖管理:使用 Hutool - Extra 的不同功能时,需要根据具体需求引入相应的第三方依赖,确保版本兼容性。
  • 资源释放:在使用一些需要连接外部资源的功能,如 FTP 操作时,要注意及时释放资源,避免资源泄漏。
  • 性能优化:对于一些性能敏感的场景,如大量文本的分词处理,需要根据实际情况进行性能优化,如调整分词引擎的配置等。

通过使用 Hutool - Extra,开发者可以在一个统一的工具包中方便地使用多种常用功能,提高开发效率,减少代码复杂度。

相关文章:

Hutool - Extra:功能丰富的扩展模块

一、简介 Hutool - Extra 作为 Hutool 工具包的扩展模块&#xff0c;对众多第三方库和功能进行了封装&#xff0c;极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面&#xff0c;为开发者在不同…...

opencv实时二维码识别的一种实现与思路分享

在嵌入式平台上比如 rk3568 这种弱鸡的平台,要做到实时视频处理就非常鸡肋,不像英伟达那种 deepstrem 什么的。 开始的时候,我们使用python 下的 pyzbar + opencv opencv 读取摄像头的数据然后每帧送到 pyzbar 二维码识别函数里面进行处理,然后打印出识别的数字。结果,非常…...

深入剖析Linux C中线程未释放问题

深入剖析 Linux C 中线程未释放问题 在 Linux C 编程中&#xff0c;线程的正确使用对于程序的性能和稳定性至关重要。其中&#xff0c;线程资源的释放是一个容易被忽视但又极为关键的环节。本文将通过具体代码示例&#xff0c;深入探讨线程未释放的问题&#xff0c;并结合进程…...

个人博客5年回顾

https://huangtao01.github.io/ 五年前&#xff0c;看程序羊的b站视频做的blog&#xff0c;受限于网络&#xff0c;只能单向学习&#xff0c;没有人指导与监督&#xff0c;从来没有想过&#xff0c;有没有什么问题&#xff1f; 一、为什么要做个人博客&#xff1f; 二、我是怎么…...

nacos编写瀚高数据库插件

1、下载nacos源码 git clone gitgithub.com:alibaba/nacos.git 2、引入瀚高驱动 <dependency><groupId>com.highgo</groupId><artifactId>jdbc</artifactId><version>${highgo.version}</version></dependency> 3、DataSource…...

bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全

ETL & 流批一体化框架 bboss v7.3.5 发布&#xff0c;多源输出插件增加为特定输出插件设置记录过滤功能&#xff1b;Elasticsearch 客户端新增异地双中心灾备机制&#xff0c;提升框架高可用性&#xff1b;Elasticsearch client 和 http 微服务框架增加对 Kerberos 认证支持…...

【编程语言】委托与函数指针

委托与函数指针的相似之处&#xff1a; 指向方法&#xff1a;C# 的委托和 C 的函数指针都可以用来指向一个方法或函数。调用方法&#xff1a;它们都可以通过引用&#xff08;委托或函数指针&#xff09;来调用指向的方法。 委托与函数指针的主要区别&#xff1a; 类型安全&am…...

《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用

专栏简介 《Python实战进阶》专栏共68集&#xff0c;分为 模块1&#xff1a;Web开发与API设计&#xff08;共10集&#xff09;&#xff1b;模块2&#xff1a;数据处理与分析&#xff08;共10集&#xff09;&#xff1b;模块3&#xff1a;自动化与脚本开发&#xff08;共8集&am…...

Redis三剑客解决方案

文章目录 缓存穿透缓存穿透的概念两种解决方案: 缓存雪崩缓存击穿 缓存穿透 缓存穿透的概念 每一次查询的 key 都不在 redis 中&#xff0c;数据库中也没有。 一般都是属于非法的请求&#xff0c;比如 id<0&#xff0c;比如可以在 API 入口做一些参数校验。 大量访问不存…...

OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::RTrees 是 OpenCV 机器学习模块中的一部分&#xff0c;用于实现随机森林&#xff08;Random Forests&#xff09;算法。随机森林是一种集…...

C++:线程当中的锁专题

在 C 多线程编程中&#xff0c;线程同步是确保程序正确运行的关键环节&#xff0c;而锁机制则是实现线程同步的重要手段。 一、线程的同步之互斥锁 1.1 互斥锁的概念 互斥锁&#xff08;Mutex&#xff0c;即 Mutual Exclusion 的缩写&#xff09;是一种最基本的线程同步工具…...

vue3 文件类型传Form Data数据格式给后端

在 Vue 3 中&#xff0c;如果你想将文件&#xff08;例如上传的 Excel 文件&#xff09;以 FormData 格式发送到后端&#xff0c;可以通过以下步骤实现。这种方式通常用于处理文件上传&#xff0c;因为它可以将文件和其他数据一起发送到服务器。 首先&#xff0c;创建一个 Vue…...

Frp部署文档

Frp部署文档 开源项目地址:https://github.com/fatedier/frp项目中文文档地址&#xff1a;https://github.com/fatedier/frp/blob/dev/README_zh.md官网文档地址: https://gofrp.org/zh-cn/docs/发布包地址&#xff1a;https://github.com/fatedier/frp/releases 要注意对应的…...

创建一个简单的spring boot+vue前后端分离项目

一、环境准备 此次实验需要的环境&#xff1a; jdk、maven、nvm和node.js 开发工具&#xff1a;idea或者Spring Tool Suite 4&#xff0c;前端可使用HBuilder X&#xff0c;数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤&#xff1a; 1、maven安装与配置 1…...

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…...

124.二叉树中的最大路径和 python

二叉树中的最大路径和 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a; 题解解决方案步骤Python 实现解释提交结果 题目 题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多…...

23.1 WebBrowser控件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面&#xff08;事实上IE也是使用的这个控件&#xff09;&#xff0c;它提供了显示网页及支持…...

vue 手写分页

【先看效果】 &#xff08;1&#xff09;内容小于2页 不展示页码 &#xff08;2&#xff09;1 < 内容页数< 限定展示页码 展示&#xff1a;页码、上下页&#xff1b;隐藏&#xff1a;首页、末页图标&#xff0c;上、下一区间码。即&#xff1a;&#xff08;页数&#…...

位运算,双指针,二分,排序算法

文章目录 位运算二进制中1的个数题解代码我们需要0题解代码 排序模版排序1题解代码模版排序2题解代码模版排序3题解代码 双指针最长连续不重复子序列题解代码 二分查找题解代码 位运算 1. bitset< 16 >将十进制数转为16位的二进制数 int x 25; cout << bitset<…...

Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册

目录 前言&#xff1a;Typora是干什么的&#xff1f; 一、下载Typora安装包 二、安装Typora 1.运行安装程序 2.启动安装 3.创建桌面图标 4.开始安装 5.安装完成 三、安装补丁 1.解压补丁包 2.在解压后的补丁包目录下找到“winmm.dll” 3.复制“winmm.dll”到Typora安…...

图谱洞见:专栏概要与内容目录

文章目录 图谱洞见&#x1f4da; 核心内容模块时空图模型研究综述与模型对比交通流量预测 知识图谱理论研究预训练语言模型与知识图谱知识图谱补全与链接预测知识蒸馏与知识表示关系建模与图卷积上下文感知与参数生成规则学习与推理可解释性研究因果推理 知识图谱实践应用数据库…...

【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码

姚期智团队开源新型注意力&#xff1a;张量积注意力&#xff08;Tensor Product Attention&#xff0c;TPA&#xff09;。有点像一种「动态的LoRA」&#xff0c;核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示&#xff0c;同时保留上下文信息&#xff0c;减少内存…...

【电机控制器】ESP32-C3语言模型——DeepSeek

【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…...

Linux修改主机名称

hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可...

设计模式教程:解释器模式(Interpreter Pattern)

1. 什么是解释器模式&#xff1f; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;通常用于处理语言&#xff08;例如数学表达式、SQL查询等&#xff09;中的语法和解释。该模式定义了一个文法&#xff0c;并通过解释器类来解释文法中…...

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...

一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)

在智能座舱项目的开发过程中&#xff0c;画面闪烁问题是一个常见但棘手的挑战。由于这些闪烁现象往往转瞬即逝&#xff0c;传统的分析工具如截图、录屏或dump图层等方法难以捕捉和定位问题根源。针对这一难题&#xff0c;本文介绍了一种较为有效的分析方法&#xff0c;能够帮助…...

ESP32 websocket-client

本文简介 ESP-IDF WebSocket-Client 实验平台 ①ESP-IDF 版本&#xff1a;release/v5.3.2 ③硬件平台&#xff1a;esp32-s3 版权声明 ①作者&#xff1a;coLin ②声明&#xff1a;问题总结&#xff0c;有误解&#xff0c;请联系纠正。 正文 1、基于 esp-idf 如何使用 …...

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...

DeepSeek写俄罗斯方块手机小游戏

DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件&#xff1a; 核心功能要求 原生JavaScript实现&#xff0c;适配手机屏幕 …...