一、简介

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

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

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

二、常用API

下面列举一些常用的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>

8.2 注意事项
Hutool的定位是减少代码搜索成本,避免从网络上复制修改代码导致的潜在问题。
所有的类都有自己的使用场景,没有银弹。应该多读使用文档,看这些工具是否符合自己的使用场景。
本文仅列举了部分常用api,整个工具包的内容非常广泛。如有需要,可到官网进一步深入学习。

今天向大家推荐一款国产良心工具包 -- Hutool,让你的java变得更甜相关推荐

  1. 真无线蓝牙耳机品牌排行榜, 四款国产良心蓝牙耳机

    真无线蓝牙耳机品牌排行榜, 四款国产良心蓝牙耳机 现在有线耳机已经是英雄迟暮了,称霸市场的当属现在的真无线蓝牙耳机.目前无线蓝牙耳机市场中,国产蓝牙耳机已经具备可以和国外大牌抗衡的实力了,面对国外大牌 ...

  2. 推荐一款国产ECG心电芯片

    现如今,许多病人的心脏病信号往往不发生在就诊时,从而为心脏病的诊断与预判带来了很大的困难.心电监测芯片技术可随时随地监测人体的健康状况,并且能够灵活应用在智能手表/手环.服饰.耳机等产品上,这一技术能 ...

  3. 强烈推荐一款国产物联网实时操作系统RT-Thread

    文章目录 强烈推荐一款国产物联网实时操作系统RT-Thread RT-Thread 的架构 实操一把 准备工作 下载RT-Thread Simulator 例程 系统启动代码 用户入口代码 跑马灯的例 ...

  4. 扩展坞可以把手机投到显示器吗_你真的会用手机吗?这款ORICO多功能扩展坞可以让手机变的更强大...

    原标题:你真的会用手机吗?这款ORICO多功能扩展坞可以让手机变的更强大 现如今科技越来越发达,手机也早已变的不仅仅是通讯工具那么简单,可以说我们一天生活.工作.学习中的许多事物都已经离不开手机.正因 ...

  5. 给你安利一款国产良心软件uTools

    前言 大家好,我是xiezhr 最近由于换了新电脑,也是在各种折腾搭建开发环境,安装各种常用软件.今天呢给大家安利一款你可能没用过的国产良心软件uTools,这也是我刚刚拿到电脑后安装的第一款软件吧. ...

  6. 8款国产良心软件,一款比一款适用,请大家低调使用

    之前给大家分享的电脑软件,很多都是国外的,那么今天我就给大家分享8个国产良心软件,款款百里挑一,还请低调使用. 阅读引导: 01*桌面日历有条不紊地管理自己每天的工作计划,一款优秀的桌面日历必不可少! ...

  7. 免费的XShell替代品,又来一款国产良心工具....

    今日推荐为啥查询那么慢? 后端接口如何提高性能? 16 个写代码的好习惯 为什么不推荐使用BeanUtils属性转换工具 盘点阿里巴巴 34 个牛逼 GitHub 项目 常见代码重构技巧(非常实用) ...

  8. 4款国产良心软件,完全免费,其中两款一直被误认为外国人开发

    1.知犀思维导图 使用思维导图梳理复杂事项,可以大幅度提升我们的工作效率.市面上大多的思维导图工具,要么使用体验不好,要么收费高. 唯独知犀思维导图让我看到国产软件的良心,它的所有功能完全免费,没有任 ...

  9. 免费的XShell替代品,同时支持Windows,macOS,Linux!又来一款国产良心工具....

    来源:toutiao.com/i6694563184428188171 引言 FinalShell是一款免费的国产的集SSH工具.服务器管理.远程桌面加速的良心软件,同时支持Windows,macOS ...

最新文章

  1. C#操作Excel导入导出
  2. PHP复杂度,php 算法复杂度 时间复杂度 空间复杂度
  3. 洛谷P1937 [USACO10MAR]仓配置Barn Allocation
  4. 1.UNIX网络编程卷1:源码配置
  5. 解密:90后程序员青睐哪些互联网公司?
  6. 向左向右向后转python_Turbot与python教程-实现左向旋转
  7. open一个绝对路径地址 python_实例15:用Python批量转换doc文件为docx文件
  8. 【java】java getOrDefault 方法的一个坑,容易导致OOM
  9. mysql期中考试题及答案_MySQL数据库考试试题与答案
  10. python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...
  11. 【动态规划】XMU 1028 Game Boy Advance
  12. 解决:git push error: failed to push some refs to
  13. linux内核虚拟内存之物理内存
  14. 热敏电阻温度计算 公式 程序
  15. 傅里叶变换的意义和理解(通俗易懂)
  16. Google 正式开源 Paranoid
  17. 了解前沿信息科技 做好学习就业规划
  18. 伦斯勒理工大学计算机专业好申请吗,只要达到标准,申请伦斯勒理工学院就不是一件困难的事情!...
  19. 掘金「跳转外链风险提示」实现思考
  20. uva10859放置街灯(树形dp)

热门文章

  1. Scrapy爬取1908电影网电影数据
  2. 刀片服务器在哪看cpu型号,了解认识刀片服务器
  3. Ubuntu下,Kdevelop的简单使用与调试
  4. 码代码时遇到的小插曲
  5. 熵、图像熵的意义及计算方法
  6. 使用Node.js创建命令行工具
  7. 腾讯云cos html,腾讯云对象存储(COS)插件安装设置图文教程
  8. pe能用的固态硬盘测试软件,通用pe工具箱教你如何让硬盘4K对齐
  9. QRCode生成二维码和解析二维码
  10. carla学习笔记(五)