news 2026/2/9 12:57:06

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/2/8 18:45:07

43、Samba与不同操作系统的连接及OS/2系统的使用配置

Samba与不同操作系统的连接及OS/2系统的使用配置 在网络环境中,Samba服务器可以为多种操作系统提供服务。下面将详细介绍Samba与Windows 3.11以及OS/2系统的连接和使用情况。 Samba与Windows 3.11 Windows 3.11及更早版本严格来说并非操作系统,而是运行在DOS之上的图形化环…

作者头像 李华
网站建设 2026/2/7 7:43:17

45、Samba配置中的操作系统特定问题与GNU GPL协议解读

Samba配置中的操作系统特定问题与GNU GPL协议解读 1. Samba与DAVE的资源分支存储 在Samba和DAVE的使用场景中,DAVE负责存储资源分支。DAVE会创建一个名为 resource.frk 的特殊文件夹,用于存储Macintosh资源分支。不过,该文件夹的内容与Netatalk的 .AppleDouble 文件夹不…

作者头像 李华
网站建设 2026/2/8 20:52:13

47、网络技术与Samba服务全面解析

网络技术与Samba服务全面解析 一、网络基础协议与服务 1.1 常见网络协议 网络中存在多种协议,它们各自有着不同的特点和用途。 - NetBEUI :NetBIOS Extended User Interface,曾被Windows广泛使用,但存在一些局限性。可以从Windows 2000、9x、NT等系统中移除该协议。例…

作者头像 李华
网站建设 2026/2/7 17:29:53

40亿参数掀起AI效率革命:Qwen3-4B-FP8重新定义轻量级大模型技术标杆

阿里巴巴通义千问团队最新发布的Qwen3-4B-Thinking-2507-FP8模型&#xff0c;以40亿参数的精炼架构实现了技术突破&#xff0c;成功架起复杂推理能力与轻量化部署之间的桥梁。该模型首次将原本依赖企业级硬件的AI核心功能引入消费级GPU环境&#xff0c;不仅打破了轻量级大模型的…

作者头像 李华