Hutool——国产良⼼⼯具包,加密,⾝份证处理 l
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
上次我们分享了⾕歌⾼⼤上的⼯具包Guava,这次我们来分享⼀款更接地⽓的国产⼯具包Hutool。
Hutool是国内程序员在⼯作中总结和积累⽽成的⼀套⼩⽽全的⼯具类库,相⽐于Guava,它更符合国内开发者的需求。Hutool⾸次发布于2014年,最新版本为5.6.5,到⽬前为⽌已经在github上收获了1.9万个赞。
我们还是先来看⼀下学习Hutool的思维导图。
下⾯列举⼀些常⽤的api,仅供参考。
1. 基础⼯具
1.1 ⽇期时间处理
⽇期操作的亮点是可以通过ChineseDate类将公历⽇期转换为农历⽇期。此外,使⽤DateUtil可以很⽅便的操作Date类型数据,LocalDateTimeUtil则⽤于操作LocalDateTime类型数据。
// 获取年份
int year = ar(new Date());
// 获取今天⽇期 yyyy-MM-dd格式
String today = day();
// 获取⽣肖
String chineseZodiac = ChineseZodiac(1990);
// 将毫秒转成⽅便阅读的时间,如3⼩时25分23秒232毫秒
String readableTime = DateUtil.formatBetween(12323232);
// 转为农历⽇期
ChineseDate chineseDate = new ChineseDate(new Date());
// 农历年份,如2021
final int chineseYear = ChineseYear();
// 农历⽉份,如腊⽉
final String chineseMonthName = ChineseMonthName();
// 农历⽇期,如初三
final String chineseDay = ChineseDay();
// ⽅便地将Date转换为LocalDateTime
final LocalDateTime localDateTime = LocalDateTimeUtil.of(new Date());
// 获取⼀天开始时间
LocalDateTimeUtil.beginOfDay(localDateTime);
字符串长度工具// 获取⼀天结束时间
1.2 I/O
IoUtils可以⽅便地复制⽂件,其他相关api建议使⽤jdk的Files⼯具类。
// 从⽂件中获取缓冲流
BufferedInputStream in = InputStream("d:/");
BufferedOutputStream out = OutputStream("d:/");
// 拷贝⽂件
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 = wHashSet(1, 2, 3);
Set<Integer> linkedHashSet = wLinkedHashSet(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 = List(1, 2, 3);
// 创建⼀个LinkedList
List<Integer> linkedList = LinkedList(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 = BirthByIdCard(idCard);
// 根据⾝份证号获取省份
String province = ProvinceByIdCard(idCard);
// 判断⾝份证号是否合法
boolean valid = IdcardUtil.isValidCard18(idCard);
// 获取⼀个随机的社会信⽤代码
String creditCode = CreditCodeUtil.randomCreditCode();
// 判断社会信⽤代码是否合法
boolean isCreditCode = CreditCodeUtil.isCreditCode(creditCode);
// 将汉字转为拼⾳,需要引⼊TinyPinyin、JPinyin或Pinyin4j的jar包
String china = Pinyin("中国");
// 将字符串⽣成为⼆维码,需要引⼊的jar包
BufferedImage qrCodeImage = ate("www.baidu", ate());
ImageIO.write(qrCodeImage, "png", new File("a.png"));
// ⽣成uuid
String uuid = IdUtil.fastSimpleUUID();
// 创建基于Twitter SnowFlake算法的唯⼀ID,适⽤于分布式系统
final Snowflake snowflake = ateSnowflake(1, 1);
final long id = Id();
2. 定时任务
通过简单的api,实现全局统⼀的定时任务调度
// 添加新的定时任务
final String scheduleId = CronUtil.schedule("*/2 * * * * *", (Task) () -> System.out.println("执⾏定时任务")); // 设置是否⽀持秒级别定时任务
CronUtil.setMatchSecond(true);
// 开启定时任务
CronUtil.start();
3. 验证码
可以⽅便地⽣成图形验证码。
// ⽣成线段⼲扰的验证码
LineCaptcha lineCaptcha = ateLineCaptcha(200, 100, 5, 3);
lineCaptcha.write("/your/path/b.png");
// ⽣成圆圈⼲扰的验证码
CircleCaptcha captcha = ateCircleCaptcha(200, 100, 4, 20);
captcha.write("/your/path/c.png");
/
/ ⽣成扭曲⼲扰的验证码
ShearCaptcha shearCaptcha = ateShearCaptcha(200, 100, 4, 4); shearCaptcha.write("/your/path/d.png");
4. 缓存
可以⽅便地使⽤基于内存的缓存,并设置过期时间的策略。
// 创建先进先出的缓存,并设置过期时间
FIFOCache<String, Object> cache = wFIFOCache(1000, 3600 * 1000);
// 向缓存中添加元素
cache.put("a", 1);
// 从缓存中读取元素
<("a");
5. Excel操作
// 将⽂件转换为ExcelReader
ExcelReader reader = Reader("d:/aaa.xlsx");
// 读取所有⾏和列的数据
List<List<Object>> data = ad();
// 读取为Map列表,默认excel第⼀⾏为标题⾏,Map中的key为标题,value为标题对应的单元格值。List<Map<String,Object>> dataMap = adAll();
//创建writer
ExcelWriter writer = Writer("d:/bbb.xlsx");
// 数据量特别⼤时,使⽤BigExcelWriter对象,可以避免内存溢出
ExcelWriter bigWriter = BigWriter("d:/bbb.xlsx");
// 构造数据
List<String> row1 = wArrayList("aa", "bb", "cc", "dd");
List<String> row2 = wArrayList("aa1", "bb1", "cc1", "dd1");
List<String> row3 = wArrayList("aa2", "bb2", "cc2", "dd2");
List<String> row4 = wArrayList("aa3", "bb3", "cc3", "dd3");
List<String> row5 = wArrayList("aa4", "bb4", "cc4", "dd4");
List<List<String>> rows = wArrayList(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 = ("www.baidu", params);
/
/ 发送post请求
String postResult = HttpUtil.post("www.baidu", params);
// 以application/json⽅式发送post请求
String jsonPostResult = HttpUtil.post("www.baidu", JSONString(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("下载中,已下载" + adableFileSize(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 = ateKeyPair("RSA");
String publicKey = Public().getEncoded());
String privateKey = Private().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 注意事项
1. Hutool的定位是减少代码搜索成本,避免从⽹络上复制修改代码导致的潜在问题。
2. 所有的类都有⾃⼰的使⽤场景,没有银弹。应该多读使⽤⽂档,看这些⼯具是否符合⾃⼰的使⽤场景。
3. 本⽂仅列举了部分常⽤api,整个⼯具包的内容⾮常⼴泛。如有需要,可到官⽹进⼀步深⼊学习。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。