Hutool——国产良心工具包,让你的java变得更甜

news2024/11/27 8:46:32

目录

1. 基础工具

1.1 日期时间处理

1.2 I/O

1.3 字符串处理

1.4 集合框架

1.5 常见业务

2. 定时任务

3. 验证码

4. 缓存

5. Excel操作

6. Http请求

7. 加密

7.1 加密和解密

7.2 签名和验签

8. 其他说明

8.1 引入Hutool


Hutool是国内程序员在工作中总结和积累而成的一套小而全的工具类库,相比于Guava,它更符合国内开发者的需求。

Hutool首次发布于2014年,最新版本为5.6.5,到目前为止已经在github上收获了1.9万个赞。

我们还是先来看一下学习Hutool的思维导图。

下面列举一些常用的api,仅供参考。

1. 基础工具

1.1 日期时间处理

日期操作的亮点是可以通过ChineseDate类将公历日期转换为农历日期。此外,使用DateUtil可以很方便的操作Date类型数据,LocalDateTimeUtil则用于操作LocalDateTime类型数据。

// 获取年份
int year = DateUtil.year(new Date());

// 获取今天日期 yyyy-MM-dd格式
String today = DateUtil.today();

// 获取生肖
String chineseZodiac = DateUtil.getChineseZodiac(1990);

// 将毫秒转成方便阅读的时间,如3小时25分23秒232毫秒
String readableTime = DateUtil.formatBetween(12323232);

// 转为农历日期
ChineseDate chineseDate = new ChineseDate(new Date());
// 农历年份,如2021
final int chineseYear = chineseDate.getChineseYear();
// 农历月份,如腊月
final String chineseMonthName = chineseDate.getChineseMonthName();
// 农历日期,如初三
final String chineseDay = chineseDate.getChineseDay();

// 方便地将Date转换为LocalDateTime
final LocalDateTime localDateTime = LocalDateTimeUtil.of(new Date());

// 获取一天开始时间
LocalDateTimeUtil.beginOfDay(localDateTime);
// 获取一天结束时间
LocalDateTimeUtil.endOfDay(localDateTime);

1.2 I/O

IoUtils可以方便地复制文件,其他相关api建议使用jdk的Files工具类。

// 从文件中获取缓冲流
BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");

// 拷贝文件
IoUtil.copy(in, out);

1.3 字符串处理

一些简单易用的字符串处理api,以及正则表达式的api。

// 判断字符串是否为null或空串
boolean isEmpty = StrUtil.isEmpty(str);

// 判断字符串是否为null或空串或空白字符
boolean isBlank = StrUtil.isBlank(str);

// 将字符串用指定字符填充到指定长度
String filled = StrUtil.fillAfter(str, '*', 10);

// 填充字符串模板
String format = StrUtil.format("a的值为{a}, b的值为{b}", Map.of("a", "aValue", "b", "bValue"));

// 判断字符串是否为中文字符串
boolean match = ReUtil.isMatch(ReUtil.RE_CHINESES, "中国人");

1.4 集合框架

可以用于创建集合和集合的交、并、差集操作。

// 新建一个HashSet
Set<Integer> hashSet = CollUtil.newHashSet(1, 2, 3);
Set<Integer> linkedHashSet = CollUtil.newLinkedHashSet(4, 2, 3);

// 两个集合取交集
Collection<Integer> intersection = CollUtil.intersection(hashSet, linkedHashSet);

// 两个集合取并集
Collection<Integer> union = CollUtil.union(hashSet, linkedHashSet);

// 两个集合取差集
Collection<Integer> disjunction = CollUtil.disjunction(hashSet, linkedHashSet);

// 判断一个集合是否为null或空集
boolean empty = CollUtil.isEmpty(hashSet);

// 创建一个ArrayList
List<Integer> arrayList = ListUtil.toList(1, 2, 3);

// 创建一个LinkedList
List<Integer> linkedList = ListUtil.toLinkedList(1, 2, 3);

// 创建一个map
Map<String, Object> map = MapUtil.<String, Object>builder().put("a", 1).put("b", 2).build();

1.5 常见业务

身份证、社会信用代码、拼音操作、生成二维码、生成唯一ID等一些常见业务场景api。

// 根据身份证号获取出生日期
String birth = IdcardUtil.getBirthByIdCard(idCard);

// 根据身份证号获取省份
String province = IdcardUtil.getProvinceByIdCard(idCard);

// 判断身份证号是否合法
boolean valid = IdcardUtil.isValidCard18(idCard);

// 获取一个随机的社会信用代码
String creditCode = CreditCodeUtil.randomCreditCode();

// 判断社会信用代码是否合法
boolean isCreditCode = CreditCodeUtil.isCreditCode(creditCode);

// 将汉字转为拼音,需要引入TinyPinyin、JPinyin或Pinyin4j的jar包
String china = PinyinUtil.getPinyin("中国");

// 将字符串生成为二维码,需要引入com.google.zxing.core的jar包
BufferedImage qrCodeImage = QrCodeUtil.generate("www.baidu.com", QrConfig.create());
ImageIO.write(qrCodeImage, "png", new File("a.png"));

// 生成uuid
String uuid = IdUtil.fastSimpleUUID();

// 创建基于Twitter SnowFlake算法的唯一ID,适用于分布式系统
final Snowflake snowflake = IdUtil.createSnowflake(1, 1);
final long id = snowflake.nextId();

2. 定时任务

通过简单的api,实现全局统一的定时任务调度

// 添加新的定时任务
final String scheduleId = CronUtil.schedule("*/2 * * * * *", (Task) () -> System.out.println("执行定时任务"));

// 设置是否支持秒级别定时任务
CronUtil.setMatchSecond(true);

// 开启定时任务
CronUtil.start();

3. 验证码

可以方便地生成图形验证码。

// 生成线段干扰的验证码
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100, 5, 3);
lineCaptcha.write("/your/path/b.png");

// 生成圆圈干扰的验证码
CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
captcha.write("/your/path/c.png");

// 生成扭曲干扰的验证码
ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
shearCaptcha.write("/your/path/d.png");

4. 缓存

可以方便地使用基于内存的缓存,并设置过期时间的策略。

// 创建先进先出的缓存,并设置过期时间
FIFOCache<String, Object> cache = CacheUtil.newFIFOCache(1000, 3600 * 1000);

// 向缓存中添加元素
cache.put("a", 1);

// 从缓存中读取元素
cache.get("a");

5. Excel操作

// 将文件转换为ExcelReader
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");

// 读取所有行和列的数据
List<List<Object>> data = reader.read();

// 读取为Map列表,默认excel第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
List<Map<String,Object>> dataMap = reader.readAll();

//创建writer
ExcelWriter writer = ExcelUtil.getWriter("d:/bbb.xlsx");

// 数据量特别大时,使用BigExcelWriter对象,可以避免内存溢出
ExcelWriter bigWriter = ExcelUtil.getBigWriter("d:/bbb.xlsx");

// 构造数据
List<String> row1 = CollUtil.newArrayList("aa", "bb", "cc", "dd");
List<String> row2 = CollUtil.newArrayList("aa1", "bb1", "cc1", "dd1");
List<String> row3 = CollUtil.newArrayList("aa2", "bb2", "cc2", "dd2");
List<String> row4 = CollUtil.newArrayList("aa3", "bb3", "cc3", "dd3");
List<String> row5 = CollUtil.newArrayList("aa4", "bb4", "cc4", "dd4");
List<List<String>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);

// 一次性将数据写入excel中
writer.write(rows, true);

6. Http请求

Map<String, Object> params = MapUtil.<String, Object>builder().put("a", 1).build();
// 发送get请求
String getResult = HttpUtil.get("https://www.baidu.com", params);

// 发送post请求
String postResult = HttpUtil.post("https://www.baidu.com", params);

// 以application/json方式发送post请求
String jsonPostResult = HttpUtil.post("https://www.baidu.com", JSON.toJSONString(params));

// 下载文件,提供生命周期钩子
HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"), new StreamProgress() {
    @Override
    public void start() {
        System.out.println("开始下载");
    }

    @Override
    public void progress(long progressSize) {
        System.out.println("下载中,已下载" + FileUtil.readableFileSize(progressSize));
    }

    @Override
    public void finish() {
        System.out.println("下载完成");
    }
});

7. 加密

7.1 加密和解密

// md5摘要加密
String md5 = SecureUtil.md5("abc");

// sha1摘要加密
String sha1 = SecureUtil.sha1("abc");

// 生成非对称密钥对
KeyPair keyPair = SecureUtil.generateKeyPair("RSA");
String publicKey = Base64Encoder.encode(keyPair.getPublic().getEncoded());
String privateKey = Base64Encoder.encode(keyPair.getPrivate().getEncoded());

// 利用公钥加密
String encryptBase64 = SecureUtil.rsa(privateKey, publicKey).encryptBase64("abc", KeyType.PublicKey);

// 利用私钥解密
String decrypt = new String(SecureUtil.rsa(privateKey, publicKey).decrypt(encryptBase64, KeyType.PrivateKey));

7.2 签名和验签

// 创建签名对象
Sign sign = SecureUtil.sign(SignAlgorithm.MD5withRSA);

// 生成签名
final byte[] bytes = "abc".getBytes();
byte[] signed = sign.sign(bytes);

// 验证签名
boolean verify = sign.verify(bytes, signed);
System.out.println(verify);

8. 其他说明

8.1 引入Hutool

在项目中可以通过maven引入Hutool库,方式如下:

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

## 流体力学或湍流理论中壁函数(wall function)

流体力学或湍流理论中壁函数&#xff08;wall function&#xff09; 一、壁函数&#xff08;wall function&#xff09;概念 在流体力学或湍流理论中&#xff0c;壁函数是基于壁定律得到的无量纲速度 u u^ u与无量纲壁距 y y^ y之间的函数关系。 在对数层区域&#xff0c;速…

SAHI: Slicing Aided Hyper Inference

SAHI是一个用于大规模目标检测和实例分割的轻量级视觉库 概述 目标检测和实例分割是目前计算机视中最重要的应用领域。然而&#xff0c;在实际应中&#xff0c;小目标的检测和大图像上的推理仍然是主要的问题&#xff0c;SAHI 来帮助开发人员用许多视觉实用工具克服这些现实世…

破案了,c知道就是套壳chatgpt

不过也是好事儿&#xff0c;国内不用魔法也可以用gpt了&#xff0c;比一些公司硬要自己开发二流产品强多了

超牛逼黑客帝国代码雨,装X必用

html 1.用法 在电脑桌面新建一个文本文档&#xff0c;然后将代码复制到文本文档里&#xff0c;再将后缀改为".html"。 2.效果图 <!DOCTYPE html> <html> <head><title>黑客帝国代码雨</title> </head><body> <can…

Grafana中table的使用技巧

将多个指标数据显示在同一个Table中&#xff0c;需要用到Transform功能&#xff0c;利用Transform功能可以将数据进行处理只显示想要的数据&#xff1a;

OA低代码平台为企业踏出信息化系统第一步

随着互联网不断的发展&#xff0c;传统的管理模式已经快速进入淘汰的阶段。在这个快速发展的社会&#xff0c;企业若想快速高效的运营&#xff0c;必须踏出第一步改变—信息化系统。对于一个企业而言&#xff0c;企业员工是办公自动化&#xff08;简称OA&#xff09;生存的根本…

OpenCV for Python 第六天:图像的加法运算和加法加权运算

上一篇博客当中&#xff0c;我们认识了如何获取图片的属性&#xff0c;那么这一篇博客我们就来了解一下有关图像的加法和位运算是什么样的&#xff0c;并通过这些运算完成图片的相关操作 文章目录 加法运算cv2.add()cv2.addWeighted()基础操作符 add() 与基础操作符 的对比 每日…

【golang】12、gin 源码解析

文章目录 快速使用返回响应路由匹配pathqueryMultipart/Urlencoded Form 解析请求MultipartFrom MiddleWare github.com/gin-gonic/gin 是 golang 的 web 框架&#xff0c;其用字典树做路由匹配、支持中间件&#xff0c;本文介绍其源码实现。 快速使用 package mainimport (&…

C语言字符串函数学习

前面已经学习了strcpy和strcmp函数&#xff1b;下面继续学习其他的字符串函数&#xff1b; strcat(字符数组1&#xff0c;字符数组2) 字符串连接 把两个字符数组中的字符串连接起来&#xff0c;把字符串2连接到字符串1的后面&#xff0c;结果放在字符数组1中&#xff1b; …

Microsoft Outlook如何撤回已发送的邮件?

打开想要撤回的邮件→More Move Actions→Recall This Message→成功撤回的前提是对方尚未阅读此邮件

vs Qt工程界面无法使用中文,报编译错误问题解决方案

vs Qt工程界面无法使用中文&#xff0c;报编译错误问题解决方案 若基于visual studio 开发Qt 界面程序时&#xff0c;若想界面显示中文时&#xff0c;如设置按钮文字为“按钮”&#xff0c;编译时报错&#xff0c;如")"&#xff0c;这个是由于文件编码问题 1. 可以…

Prompt 技巧指南-让 ChatGPT 回答更准确

随着 ChatGPT 等大型语言模型 (LLM)的兴起&#xff0c;人们慢慢发现&#xff0c;怎么样向 LLM 提问、以什么技巧提问&#xff0c;是获得更加准确的回答的关键&#xff0c;也由此产生了提示工程这个全新的领域。 提示工程(prompt engineering)是一门相对较新的领域&#xff0c;用…

Milk-V Duo开发板之TF扩容

起因 开发板正式进入系统后&#xff0c;然后通过SSH的方案登录进入&#xff0c;进入以后&#xff0c;使用df -h命令查看&#xff0c;会发现ROOTFS的容量仅仅只有245.9MB&#xff0c;而我们的boot分区的容量也不过128MB&#xff0c;那么我的TF卡一共32GB&#xff0c;剩下的容量…

windows mysql 自动启动bat脚本

上一篇&#xff1a;windows mysql服务自动启动 错误模块名称:ntdll.dll_csdn_aspnet的博客-CSDN博客 根据上一篇文章进行手动启动mysql服务补充&#xff0c;由于演示机器系统安装的为win11家庭版&#xff0c;为了安全起见&#xff0c;在项目演示期间&#xff0c;避免数据库使用…

基于 Junit 的接口自动化测试框架实现

目录 前言&#xff1a; 分层的自动化测试 接口测试的意义 接口测试框架选型 我们封装的接口测试框架 接口测试关键实践 测试代码规范 (仅供参考) 前言&#xff1a; 基于JUnit的接口自动化测试框架可以实现对接口进行自动化测试&#xff0c;并提供了丰富的断言和报告功能…

PALO ALTO NETWORKS 的新一代防火墙如何保护企业安全

轻松采用创新技术、阻止网络攻击得逞并专注更重要的工作 IT 的快速发展已改变网络边界的面貌。数据无处不在&#xff0c;用户可随时随地从各类设备访问这些数据。同时&#xff0c;IT 团队正在采用云、分析和自动化来加速新应用的交付以及推动业务发展。这些根本性的转变带来了…

Kakfa - 多副本架构

文章目录 基本架构Kafka 多副本架构概念优点缺点 图解多副本架构小结 基本架构 Kafka 多副本架构 概念 Kafka 是一个高性能、分布式的消息系统&#xff0c;被广泛应用于各种场景中。在 Kafka 中&#xff0c;多副本架构是保证数据可靠性的重要手段之一。 多副本架构指的是将同…

【动手学深度学习】--12.深度卷积神经网络AlexNet

文章目录 深度卷积神经网络AlexNet1.AlexNet2.模型设计3.激活函数4.模型实现5.读取数据集6.训练AlexNet 深度卷积神经网络AlexNet 学习视频&#xff1a;深度卷积神经网络 AlexNet【动手学深度学习v2】 官方笔记&#xff1a;深度卷积神经网络&#xff08;AlexNet&#xff09; …

Qt的三大优势,打造高效工业软件开发:

强大的跨平台特性&#xff1a;Qt拥有优良的跨平台支持&#xff0c;可以在众多操作系统上运行&#xff0c;包括Microsoft Windows、Linux、Solaris、HP-UX、FreeBSD、QNX等等。这使得开发者可以轻松地将应用程序部署到不同的平台上&#xff0c;提高开发效率和覆盖范围。 面向对…

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

在水利、环境、生态、机械以及航天等领域中&#xff0c;数学模型已经成为一种常用的技术手段。同时&#xff0c;为了提高模型的性能&#xff0c;减小模型误用带来的风险&#xff1b;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…