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

目录

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() {@Overridepublic void start() {System.out.println("开始下载");}@Overridepublic void progress(long progressSize) {System.out.println("下载中,已下载" + FileUtil.readableFileSize(progressSize));}@Overridepublic 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.hqwc.cn/news/29109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建型模式 - 原型模式

概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽象原型类的 clone() 方…

rce题目

<?php include "flag.php"; highlight_file(__FILE__); if(isset($_GET[HECTF])) { if (; preg_replace(/[^\W]\((?R)?\)/, NULL, $_GET[HECTF])) { if (!preg_match(/pos|high|op|na|info|dec|hex|oct|pi/i, $_GET[HECTF])) { eval(…

测试基础 Android 应用测试总结

目录 启动&#xff1a; 功能介绍&#xff0c;引导图&#xff0c;流量提示等&#xff1a; 权限&#xff1a; 文件错误 屏幕旋转&#xff1a; 流量&#xff1a; 缓存&#xff08;/sdcard/data/com.your.package/cache/&#xff09;&#xff1a; 正常中断&#xff1a; 异…

随手笔记——如何手写高斯牛顿法

随手笔记——如何手写高斯牛顿法 说明源代码 说明 将演示如何手写高斯牛顿法 源代码 #include <iostream> #include <chrono> #include <opencv2/opencv.hpp> #include <Eigen/Core> #include <Eigen/Dense>using namespace std; using names…

3D虚拟展厅和VR全景展厅该如何选择

导言&#xff1a; 在当今数字化时代&#xff0c;传统展厅已逐渐演变为3D虚拟展厅和VR全景展厅。这些技术的广泛应用为企业带来了全新的营销和展示方式。 一&#xff0e;3D虚拟展厅的特点和优势 3D虚拟展厅是一种基于3D技术的虚拟展示空间&#xff0c;通过计算机图像和模拟技术…

AI读心术:情感分析和数据标注的奥秘

情感分析也被称为情感分类&#xff0c;意图挖掘&#xff1b;是让机器去辨别和理解人类的情感语言文本的技术。互联网技术发展至今&#xff0c;人人都和手机形影不离&#xff0c;任何消费行为、生活休闲、美食评论、旅行决策都可以通过网络的连接让信息共享和公开。商家也利用这…

HarmonyOS/OpenHarmony应用开发-程序包多HAP机制(下)

三、多HAP的开发调试与发布部署流程 &#xff08;一&#xff09;多HAP的开发调试与发布部署流程如下图所示。 图1 多HAP的开发调试与发布部署流程 &#xff08;二&#xff09;开发 开发者通过DevEco Studio工具按照业务的需要创建多个Module&#xff0c;在相应的Module中完成…

[深度学习实战]基于PyTorch的深度学习实战(上)[变量、求导、损失函数、优化器]

目录 一、前言二、深度学习框架——PyTorch2.1 PyTorch介绍2.2 Python安装详解2.3 PyTorch安装详解 三、变量四、求导五、损失函数5.1 nn.L1Loss5.2 nn.SmoothL1Loss5.3 nn.MSELoss5.4 nn.BCELoss5.5 nn.CrossEntropyLoss5.6 nn.NLLLoss5.7 nn.NLLLoss2d 六、优化器Optim 6.1 …

爬虫+Flask+Echarts搭建《深度学习》书评显示大屏

爬虫FlaskEcharts搭建《深度学习》书评显示大屏 1、前言2、实现2.1 挑选想要采集的书籍2.2 构建爬虫2.2.1 采集书籍信息2.2.2 采集书评 2.3 数据清洗2.3.1 清洗书籍信息2.3.2 清洗书评信息 2.4 统计分析&#xff0c;结果持久化存储2.5 搭建flask框架2.6 数据传值2.7 完整代码&a…

Microsoft Outlook如何建立联系人组 ?

New Items→More Items→Contact Group 选择Add Members→From Address Book

深度学习(29)—— DETR

深度学习&#xff08;29&#xff09;—— DETR DETR代码欢迎光临Jane的GitHub&#xff1a;在这里等你 看完YOLO 之后&#xff0c;紧接着看了DETR。作为Transformer在物体检测上的开山之作&#xff0c;虽然他的性能或许不及其他的模型&#xff0c;但是想法是OK的。里面还有一些…

C国演义 [第十二章]

第十二章 打家劫舍题目理解步骤dp数组递推公式初始化遍历顺序 代码 打家劫舍II题目理解步骤递推公式初始化遍历顺序 代码 打家劫舍 力扣链接 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋…