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 工具包的扩展模块,对众多第三方库和功能进行了封装,极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面,为开发者在不同…...
C++ 中的继承详解(上)
目录 1、继承的概念及定义 1.1、继承的概念 1.2、继承定义 1.2.1、定义格式 1.2.2、继承方式 1.2.3、继承基类成员访问方式的变化 2、基类和派生类对象赋值转换 3、继承中的作用域 4、派生类的默认成员函数 补充:封装的层次(实际上有很多层的,这…...
halcon三维点云数据处理(二十五)moments_object_model_3d
目录 一、moments_object_model_3d例程二、moments_object_model_3d函数三、效果图 一、moments_object_model_3d例程 这个例子说明了如何使用moments_object_model_3d运算符来将3D数据与x、y、z坐标轴对齐。在实际应用中,通过3D传感器获取的物体模型可能具有一个与…...
Mac M3/M4 本地部署Deepseek并集成vscode
Mac 部署 使用傻瓜集成平台ollama,ollama平台依赖于docker,Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用,导致docker无法启动,需要使用docker的替代品podman, 它完全兼容docker brew install p…...
2024年职高单招或高考计算机类投档线
问题: 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答: 部分学校2024年职高单招或高考计算机类投档线如下: 湖南工业职业技术学院 职高单招:未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…...
Unity Excel导表工具转Lua文件
思路介绍 借助EPPlus读取Excel文件中的配置数据,根据指定的不同类型的数据配置规则来解析成对应的代码文本,将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…...
SpringBoot项目集成MinIO
最近在学习MinIO,所以想让自己的SpringBoot项目集成MinIO,在网上查阅资料,并进行操作的过程中遇到一些问题,所以想把自己遇到的坑和完成步骤记录下来供自己和各位查阅。 一. MinIO的下载安装以及基本使用 1. 下载地址:https://d…...
第30篇 基于ARM A9处理器用C语言实现中断<六>
Q:怎样设计基于ARM A9处理器的C语言程序在数码管上滚动显示字符? A:使用A9 Private Timer中断源,控制字符滚动的速度;按键产生中断可以控制字符暂停/继续滚动。 本实验在DE1-SoC开发板的6个七段数码管*HEX5~HEX0*上…...
Flutter 中的单例模式
传统: class RouterManager {// 单例模式static final RouterManager _instance RouterManager._internal();factory RouterManager() {return _instance;}RouterManager._internal(); }传递参数进行初始化时: class RouterManager {// 私有静态实例&a…...
8.python文件
文章目录 1.**文件**1.1**文件是什么**1.2**文件路径**1.3**文件操作**1.3.1**打开文件**1.3.2**关闭文件**1.3.3**写文件**1.3.4**读文件** 1.4**关于中文的处理**1.5**使用上下文管理器** 大家好,我是晓星航。今天为大家带来的是 python文件 相关的讲解࿰…...
2025vue4.x全栈学习关键技术分析线路图
关键升级点说明: 编译优化 :Vue 4.x采用WASM编译提速300% 智能工具链 :Vite插件市场新增AI代码审查模块 跨平台能力 :Uni-App支持原生ARCore/ARKit调用 安全增强 :默认启用WebAuthn生物认证…...
革新之力:数字科技——重塑未来的超越想象之旅
在21世纪的科技浪潮中,数字科技如同一股不可阻挡的洪流,正以前所未有的速度和广度改变着我们的生活、工作乃至整个社会的结构。它不仅是技术的简单迭代,更是对人类社会认知边界的拓宽,对经济模式、社会治理、文化形态等多方面的深…...
超级详细,知识图谱系统的理论详解+部署过程
知识图谱系统(Knowledge Graph System)是一种用于表示、存储、查询和推理知识的系统。它通过结构化的方式将现实世界中的实体、概念及其相互关系组织成一个图结构,从而帮助机器理解和处理复杂的知识。 知识图谱的核心组成部分 实体(Entities): 实体是知识图谱中的节点,…...
电路笔记 (信号): opa tips 放大器反馈电阻并联电容抑制高频噪声的详细推导(传递函数分析)
1. 高频噪声传递函数分析 (1)电路结构 输入信号通过 R 1 R_1 R1 和 C NI C_{\text{NI}} CNI 的并联组合连接到运放的同相输入端。反馈电阻 R 2 R_2 R2 连接在运放的输出端和反相输入端之间。 Layer 1 - 30p R2 R1 R3R1//R2 IN OUT 反向放大电…...
DeepSeek安装部署笔记(一)
Ollamaopen-WebUI部署 DeepSeek安装部署笔记第一步 Ollama安装1.安装ollama:官网https://ollama.com/下载2.上面安装完成,在cmd命令行: 第二步 给DeepSeek添加OpenWebUI界面(重点)1.安装conda:用它来管理py…...
【JavaEE进阶】Spring MVC(4)-图书管理系统案例
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 图书管理系统 创建书籍类BookInfo import lombok.Data;import java.math.BigDecimal;Data //这个类基本上是和数据库对应起来的 public class BookInfo {private Integer id…...
Ubuntu部署ktransformers
准备工作 一台服务器 CPU:500G GPU:48G(NVIDIA4090) 系统:Ubuntu20.04(github的文档好像用的是22.04) 第一步:下载权重文件 1.下载hfd wget https://hf-mirror.com/hfd/hfd.s…...
助力DeepSeek私有化部署服务:让企业AI落地更简单、更安全
在数字化转型的浪潮中,越来越多的企业选择私有化部署AI技术,以保障数据安全、提升业务效率并实现自主可控。DeepSeek作为行业领先的AI开源技术,其技术可以支持企业私有化部署,企业需要一站式服务私有化部署,涵盖硬件采…...
面试官询问项目前后端人员配比之高分示范回答
面试官询问项目前后端人员配比之高分示范回答 以下是对两个项目前后端人员配置的精准分析,结合 技术复杂度、协作效率、风险控制 三个维度设计回答,突出合理性与团队协作意识: 一、《x能x服》项目(Vue重构) 1. 人员配置与分工 前端:1人(独立开发) 负责旧系统业务逻辑…...
MyBatis中的日志和映射器说明
1.MyBatis中的日志 1.1 什么是日志 在我们编写应用的时候,有一些信息需要及时查看,查看的时候有时需要输出到控制台,有时需要输出到文件。MyBatis也需要日志,一般情况下,使用log4j进行日志管理。 1.2 在MyBatis中…...
ST-Link驱动安装与Keil MDK配置保姆级教程(含固件升级与常见错误排查)
ST-Link驱动安装与Keil MDK配置保姆级教程(含固件升级与常见错误排查) 当你第一次拿到ST-Link调试器和STM32开发板时,可能会被各种驱动安装、软件配置搞得晕头转向。作为过来人,我完全理解这种困惑——明明按照教程一步步操作&…...
别再只用VF强拖了!手把手教你用Simulink实现PMSM的IF强拖启动(附模型下载)
永磁同步电机IF强拖启动的Simulink实战:从原理到参数调优 在电机控制领域,启动策略的选择往往决定了整个系统的稳定性和响应速度。传统VF强拖虽然实现简单,但在动态响应和平滑切换方面存在明显短板。本文将带您深入理解IF强拖的底层原理&…...
AI Tech Interview数据结构与算法精讲:面试官最爱问的20个问题
AI Tech Interview数据结构与算法精讲:面试官最爱问的20个问题 【免费下载链接】ai-tech-interview 👩💻👨💻 AI 엔지니어 기술 면접 스터디 (⭐️ 2k) 项目地址: https://gitcode.com/gh_mirrors/ai/ai-tech-in…...
计算机毕业设计:Python基金投研与多维度对比系统 Django框架 数据分析 可视化 爬虫 大数据 大模型(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...
江科大STM32实战笔记精讲『上篇』
1. STM32入门实战基础 STM32作为嵌入式开发领域的明星产品,其强大的性能和丰富的外设资源使其成为工程师的首选。对于初学者来说,掌握STM32的核心外设配置是迈向嵌入式开发的第一步。本部分将重点介绍STM32最小系统搭建和开发环境配置。 要构建一个完整的…...
零设计基础,3 分钟搞定符合期刊要求的科研插图
作为一名已经顺利完成课题的研究生,我想很多研究生都和我有过一样的经历:熬了几个月做完实验,整理好了数据,写好了论文正文,结果卡在了论文插图这一步——明明实验设计严谨、结果漂亮,就是画出来的插图要么…...
TP4054锂电充电芯片实战:USB供电下的5个常见问题与解决方案
TP4054锂电充电芯片实战:USB供电下的5个常见问题与解决方案 在便携式电子设备设计中,锂离子电池充电管理一直是硬件工程师面临的核心挑战之一。TP4054作为一款专为USB供电场景优化的单节锂电充电芯片,凭借其紧凑的SOT-23封装和简洁的外围电路…...
Yakit WebFuzzer序列实战:巧用数据提取器和Nuclei DSL函数,动态处理上传路径
Yakit WebFuzzer序列实战:动态路径处理与Nuclei DSL高阶应用 在渗透测试中,文件上传漏洞的验证往往需要处理服务器返回的动态路径。这些路径可能包含相对路径符号(如../upload/)、时间戳或随机字符串,直接使用这些路径…...
告别取模软件!用Python脚本为51单片机的8×8点阵自定义图案(附源码)
用Python脚本解放51单片机点阵开发:从手动取模到自动化生成 每次在PCtoLCD2002里一个个像素点鼠标点击,再复制生成的数组到代码中,这种重复劳动是否让你感到效率低下?本文将介绍一种革命性的解决方案——用Python脚本自动生成51单…...
ZYNQ PS端串口死活收不到数据?先别急着改代码,检查一下BANK电压吧!
ZYNQ PS端串口通信故障排查:从BANK电压到系统级调试思维 调试ZYNQ平台时,PS端串口突然"罢工"只能发送无法接收数据?这种看似软件问题的现象,往往隐藏着硬件配置的玄机。本文将带您深入BANK电压配置的底层逻辑࿰…...
