news 2026/1/9 13:53:21

Hutool 工具包常用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hutool 工具包常用方法

Hutool 是一个 Java 工具包,它为开发者提供了一系列实用的工具类和方法,帮助简化开发工作。本文将详细介绍 Hutool 的主要功能和使用方法,帮助开发者更好地利用这个强大的工具包。

1. Hutool 简介

Hutool 是由dromara团队开发的一款 Java 工具包,旨在通过提供丰富的工具类,减少开发者的重复劳动,提升开发效率。Hutool 的设计灵感来源于 Guava、Commons Lang 等工具库,但其功能更加全面,使用更加简便。Hutool 的特点包括:

  • 轻量级:Hutool 仅依赖 JDK,自身没有第三方库依赖。
  • 功能全面:涵盖字符串处理、日期处理、集合处理、IO 操作、网络操作等常见功能。
  • 易用性强:简洁的 API 设计,使得使用起来非常方便。
  • 开源:Hutool 是一个开源项目,代码托管在 GitHub 上,开发者可以自由使用和扩展。

2. Hutool 的安装与配置

在使用 Hutool 之前,需要将其引入项目中。以下是 Maven 和 Gradle 的引入方法:

Maven

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

Gradle

implementation'cn.hutool:hutool-all:5.8.11'

3. 常用工具类介绍

3.0 JavaBean的工具类:BeanUtil

JavaBean的工具类,可用于Map与JavaBean对象的互相转换以及对象属性的拷贝。

3.0.1 Bean属性注入:使用Map填充bean


首先定义两个bean:

// Lombok注解@DatapublicclassPerson{privateStringname;privateintage;}// Lombok注解@DatapublicclassSubPersonextendsPerson{publicstaticfinalStringSUBNAME="TEST";privateUUIDid;privateStringsubName;privateBooleanisSlow;}

然后注入这个bean:

Personperson=BeanUtil.fillBean(newPerson(),newValueProvider<String>(){@OverridepublicObjectvalue(Stringkey,Class<?>valueType){switch(key){case"name":return"张三";case"age":return18;}returnnull;}@OverridepublicbooleancontainsKey(Stringkey){//总是存在keyreturntrue;}},CopyOptions.create());Assert.assertEquals(person.getName(),"张三");Assert.assertEquals(person.getAge(),18);

基于BeanUtil.fillBean方法Hutool还提供了Map对象键值对注入Bean,其方法有:

  1. BeanUtil.fillBeanWithMap使用Map填充bean
HashMap<String,Object>map=CollUtil.newHashMap();map.put("name","Joe");map.put("age",12);map.put("openId","DFDFSDFWERWER");SubPersonperson=BeanUtil.fillBeanWithMap(map,newSubPerson(),false);
  1. BeanUtil.fillBeanWithMapIgnoreCase使用Map填充bean,忽略大小写
HashMap<String,Object>map=CollUtil.newHashMap();map.put("Name","Joe");map.put("aGe",12);map.put("openId","DFDFSDFWERWER");SubPersonperson=BeanUtil.fillBeanWithMapIgnoreCase(map,newSubPerson(),false);

3.0.2 map转bean

同时,Hutool还提供了BeanUtil.toBean方法,用于map转bean,与fillBean不同的是,此处并不是传Bean对象,而是Bean类,Hutool会自动调用默认构造方法创建对象。当然,前提是Bean类有默认构造方法(空构造),这些方法有:

1.BeanUtil.toBean

HashMap<String,Object>map=CollUtil.newHashMap();map.put("a_name","Joe");map.put("b_age",12);// 设置别名,用于对应bean的字段名HashMap<String,String>mapping=CollUtil.newHashMap();mapping.put("a_name","name");mapping.put("b_age","age");Personperson=BeanUtil.toBean(map,Person.class,CopyOptions.create().setFieldMapping(mapping));

2.BeanUtil.toBeanIgnoreCase

HashMap<String,Object>map=CollUtil.newHashMap();map.put("Name","Joe");map.put("aGe",12);Personperson=BeanUtil.toBeanIgnoreCase(map,Person.class,false);

3.0.3 Bean转为Map

BeanUtil.beanToMap方法则是将一个Bean对象转为Map对象。

SubPersonperson=newSubPerson();person.setAge(14);person.setOpenid("11213232");person.setName("测试A11");person.setSubName("sub名字");Map<String,Object>map=BeanUtil.beanToMap(person);

3.0.4 Bean转Bean

Bean之间的转换主要是相同属性的复制,因此方法名为copyProperties,此方法支持Bean和Map之间的字段复制。

BeanUtil.copyProperties方法同样提供一个CopyOptions参数用于自定义属性复制。

Bean转Bean

// 创建源对象Usersource=newUser();source.setUserId("5");source.setUserName("Alice");source.setAge(30);// 创建目标对象Usertarget=newUser();// 忽略年龄属性的复制BeanUtil.copyProperties(source,target,"age");System.out.println("target = "+target);// 或者使用CopyOptions忽略多个属性CopyOptionsoptions=CopyOptions.create().setIgnoreProperties("age","otherProperty");//source--->target 源对象 目标对象 忽略的属性BeanUtil.copyProperties(source,target,options);System.out.println("target = "+target);

Bean转map

SubPersonp1=newSubPerson();p1.setSlow(true);p1.setName("测试");p1.setSubName("sub测试");Map<String,Object>map=MapUtil.newHashMap();BeanUtil.copyProperties(p1,map);

5.6.6+加入copyToList方法,遍历集合中每个Bean,复制其属性到另一个类型的对象中,最后返回一个新的List。

List<Student>studentList=newArrayList<>();Studentstudent=newStudent();student.setName("张三");student.setAge(123);student.setNo(3158L);studentList.add(student);Studentstudent2=newStudent();student.setName("李四");student.setAge(125);student.setNo(8848L);studentList.add(student2);// 复制到 Person 类:源对象集合 目标对象的类型List<Person>people=BeanUtil.copyToList(studentList,Person.class);

3.1 字符串工具类

Hutool 提供了StrUtil类,用于处理字符串的常见操作。以下是一些常用的方法:

3.1.1 判断字符串是否为空

Stringstr="Hello Hutool";booleanisEmpty=StrUtil.isEmpty(str);// falsebooleanisBlank=StrUtil.isBlank(str);// false

3.1.2 字符串拼接

Stringresult=StrUtil.join(", ","a","b","c");// "a, b, c"

3.1.3 字符串分割

List<String>list=StrUtil.split("a, b, c",',');// ["a", "b", "c"]

3.1.4 字符串替换

Stringresult=StrUtil.replace("Hello World","World","Hutool");// "Hello Hutool"

3.2 集合工具类

Hutool 提供了CollUtil工具类,用于处理集合的常见操作。以下是一些常用的方法:

3.2.1 判断集合是否为空

List<String>list=Arrays.asList("a","b","c");booleanisEmpty=CollUtil.isEmpty(list);// falsebooleanisNotEmpty=CollUtil.isNotEmpty(list);// true

3.2.2 集合拼接

List<String>list1=Arrays.asList("a","b");List<String>list2=Arrays.asList("c","d");List<String>result=CollUtil.addAll(list1,list2);// ["a", "b", "c", "d"]

3.2.3 集合去重

List<String>list=Arrays.asList("a","b","a");List<String>result=CollUtil.distinct(list);// ["a", "b"]

3.3 日期时间工具类

Hutool 提供了DateUtil工具类,用于处理日期和时间的常见操作。以下是一些常用的方法:

3.3.1 获取当前时间

Datenow=DateUtil.date();// 当前时间StringnowStr=DateUtil.now();// 当前时间字符串

3.3.2 格式化日期

Datedate=DateUtil.parse("2023-07-29");StringformattedDate=DateUtil.format(date,"yyyy/MM/dd");// "2023/07/29"

3.3.3 日期加减

Datedate=DateUtil.date();DatenewDate=DateUtil.offsetDay(date,5);// 当前日期加5天

3.4 文件工具类

Hutool 提供了FileUtil工具类,用于处理文件操作。以下是一些常用的方法:

3.4.1 读取文件内容

Stringcontent=FileUtil.readUtf8String("path/to/file.txt");

3.4.2 写入文件内容

FileUtil.writeUtf8String("Hello Hutool","path/to/file.txt");

3.4.3 文件复制

FileUtil.copy("path/to/source.txt","path/to/dest.txt",true);

3.5 HTTP 工具类

Hutool 提供了HttpUtil工具类,用于处理 HTTP 请求。以下是一些常用的方法:

3.5.1 发送 GET 请求

Stringresult=HttpUtil.get("http://example.com");

3.5.2 发送 POST 请求

Map<String,Object>paramMap=newHashMap<>();paramMap.put("key1","value1");paramMap.put("key2","value2");Stringresult=HttpUtil.post("http://example.com",paramMap);

4. 其他实用功能

4.1 加密解密

Hutool 提供了SecureUtil工具类,用于加密解密操作。以下是一些常用的方法:

4.1.1 MD5 加密

Stringmd5=SecureUtil.md5("password");

4.1.2 AES 加密解密

AESaes=SecureUtil.aes();Stringencrypted=aes.encryptHex("Hello Hutool");Stringdecrypted=aes.decryptStr(encrypted);

4.2 JSON 处理

Hutool 提供了JSONUtil工具类,用于 JSON 数据的处理。以下是一些常用的方法:

4.2.1 对象转 JSON

Useruser=newUser("John",30);Stringjson=JSONUtil.toJsonStr(user);

4.2.2 JSON 转对象

Stringjson="{\"name\":\"John\",\"age\":30}";Useruser=JSONUtil.toBean(json,User.class);

4.3 Excel 处理

Hutool 提供了ExcelUtil工具类,用于 Excel 文件的处理。以下是一些常用的方法:

4.3.1 读取 Excel 文件

ExcelReaderreader=ExcelUtil.getReader("path/to/file.xlsx");List<User>users=reader.readAll(User.class);

4.3.2 写入 Excel 文件

List<User>users=Arrays.asList(newUser("John",30),newUser("Jane",25));ExcelWriterwriter=ExcelUtil.getWriter("path/to/file.xlsx");writer.write(users);writer.close();

4.4 QR 码生成

Hutool 提供了QrCodeUtil工具类,用于生成 QR 码。以下是一些常用的方法:

4.4.1 生成 QR 码图片

QrCodeUtil.generate("Hello Hutool",300,300,FileUtil.file("path/to/qrcode.png"));

4.4.2 生成带 logo 的 QR 码图片

QrCodeUtil.generate("Hello Hutool",300,300,FileUtil.file("path/to/qrcode.png"),FileUtil.file("path/to/logo.png"));

5. 综合案例

为了更好地展示 Hutool 的强大功能,下面通过一个综合案例来说明如何在实际开发中使用 Hutool。

案例:用户注册系统

  • 假设我们要开发一个简单的用户注册系统,功能包括用户注册、登录、密码加密存储、用户信息导出等。我们将利用 Hutool 来实现这些功能。

5.1 用户注册

首先,我们定义一个 User 类来表示用户信息:

publicclassUser{privateStringusername;privateStringpassword;privateStringemail;// Getter 和 Setter 方法}

然后,我们实现用户注册功能:

publicclassUserService{privateList<User>users=newArrayList<>();publicvoidregister(Stringusername,Stringpassword,Stringemail){StringencryptedPassword=SecureUtil.md5(password);Useruser=newUser();user.setUsername(username);user.setPassword(encryptedPassword);user.setEmail(email);users.add(user);}}

5.2 用户登录

接下来,我们实现用户登录功能:

publicbooleanlogin(Stringusername,Stringpassword){StringencryptedPassword=SecureUtil.md5(password);for(Useruser:users){if(user.getUsername().equals(username)&&user.getPassword().equals(encryptedPassword)){returntrue;}}returnfalse;}

5.3 用户信息导出

最后,我们实现用户信息导出到 Excel 文件:

publicvoidexportUserInfo(StringfilePath){ExcelWriterwriter=ExcelUtil.getWriter(filePath);writer.write(users);writer.close();}

通过以上代码,我们可以看到 Hutool 提供的工具类极大地简化了加密、集合操作和文件操作等任务。

6. 总结

Hutool 是一个功能强大且易用的 Java 工具包,它提供了丰富的工具类,涵盖了日常开发中的各种常见操作。通过本文的介绍,希望读者能够对 Hutool 有一个全面的了解,并能在实际开发中熟练使用它,从而提升开发效率。如果您还未使用过 Hutool,不妨尝试一下,相信它会成为您开发中的得力助手。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/6 10:49:27

深入理解Java线程池:从核心参数到实战避坑指南

引言 大家好&#xff0c;我是小码&#xff0c;一个在Java开发路上摸爬滚打的研二学生。最近在优化我们那个大营销抽奖系统时&#xff0c;频繁遇到了线程管理的问题——内存溢出、响应变慢、甚至服务直接挂掉。痛定思痛&#xff0c;我花了整整一周时间重新梳理了Java线程池的方方…

作者头像 李华
网站建设 2025/12/13 2:16:15

46、网络文件共享与管理全解析

网络文件共享与管理全解析 1. 符号与数字相关 在文件配置和使用中,一些符号和数字有着特定的含义和用途。例如,在 smb.conf 文件里, # 和 ; 用于添加注释;以 . 开头的文件名有其特殊性质,像点文件(dot files),这类文件在某些系统中可能具有隐藏性,其可见性可…

作者头像 李华
网站建设 2025/12/29 14:57:54

百度网盘极速下载方案:告别限速烦恼的完整教程

还在为百度网盘的下载速度而烦恼吗&#xff1f;这款百度网盘下载工具为你提供完美的解决方案&#xff01;通过智能解析技术&#xff0c;轻松获取有效下载地址&#xff0c;让你享受快速稳定的下载体验。 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 …

作者头像 李华
网站建设 2025/12/13 2:08:28

4、构建容器镜像全解析

构建容器镜像全解析 在容器化技术的世界里,构建容器镜像是至关重要的一环。本文将详细介绍构建容器镜像的相关指令、最佳实践以及具体的构建方法。 1. Dockerfile 指令详解 1.1 LABEL 指令 LABEL 指令用于为镜像添加额外信息,这些信息可以是版本号、描述等。建议限制标签的…

作者头像 李华
网站建设 2025/12/28 1:17:50

downkyi视频下载终极指南:10个技巧让你成为下载高手

快速入门指南&#xff08;5分钟上手&#xff09; 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项目地…

作者头像 李华
网站建设 2025/12/13 2:07:58

18、在公共云及本地环境中运行 Docker 并使用 Portainer 进行管理

在公共云及本地环境中运行 Docker 并使用 Portainer 进行管理 1. Amazon Elastic Container Service for Kubernetes(Amazon EKS) Amazon EKS 是我们要介绍的最后一个 Kubernetes 服务,它是三个服务中最新推出的。由于 Amazon 的命令行工具不太友好,我们使用由 Weave 开发…

作者头像 李华