news 2026/2/1 2:50:08

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/29 12:59:40

本地CPU部署大模型全攻略:基于llama.cpp的量化优化与实战指南

本地CPU部署大模型全攻略&#xff1a;基于llama.cpp的量化优化与实战指南 【免费下载链接】T-pro-it-2.0-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/t-tech/T-pro-it-2.0-GGUF 随着大语言模型技术的快速迭代&#xff0c;本地部署已成为AI开发者和技术爱好者的…

作者头像 李华
网站建设 2026/1/29 14:02:25

Llama-Factory是否支持模型审计?合规性检查工具包规划中

Llama-Factory是否支持模型审计&#xff1f;合规性检查工具包规划中 在金融、医疗、政务等高敏感领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的落地正面临前所未有的监管压力。一个看似高效的微调结果&#xff0c;若无法回答“训练数据是否包含个人信息&#xff1f…

作者头像 李华
网站建设 2026/1/29 13:20:24

终极指南:如何在Windows上完美模拟游戏手柄的5个关键步骤

还在为PC游戏无法识别你的手柄而烦恼吗&#xff1f;&#x1f3ae; 无论是Switch Pro手柄、第三方游戏手柄还是其他特殊输入设备&#xff0c;今天我就带你解锁Windows游戏手柄模拟的完整方法&#xff01; 【免费下载链接】ViGEmBus 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/1/31 23:06:21

11、Docker Compose与Windows容器全解析

Docker Compose与Windows容器全解析 1. Docker Compose命令详解 1.1 run命令 run 命令可用于在应用程序中一次性运行容器化命令。例如,若使用 composer 等包管理器更新存储在卷上的项目依赖项,可运行如下命令: $ docker-compose run --volume data_volume:/app comp…

作者头像 李华