文章目录

  • 一、Hutool是什么?
  • 二、安装
  • 三、常用工具类
    • 日期时间工具类 DateUtil
    • 日期时间对象-DateTime
    • 类型转换工具类 Convert
    • 字符串工具类 StrUtil
    • 数字处理工具类 NumberUtil
    • JavaBean的工具类 BeanUtil
    • 集合操作的工具类 CollUtil
    • Map操作工具类 MapUtil
    • 数组工具-ArrayUtil
    • 唯一ID工具-IdUtil
    • IO工具类-IoUtil
    • 加密解密工具类 SecureUtil
    • 验证码工具类 CaptchaUtil
    • 分页工具-PageUtil
    • Java反射工具类 ReflectUtil
    • 注解工具类 AnnotationUtil
    • ClassPath资源访问 ClassPathResource
    • 16进制工具-HexUtil
    • URL工具-URLUtil
    • 随机工具-RandomUtil
    • 身份证工具-IdcardUtil
    • 信息脱敏工具-DesensitizedUtil
    • 更多工具类

一、Hutool是什么?

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,它帮助我们简化每一行代码,避免重复造轮子。如果你有需要用到某些工具方法的时候,可以在Hutool里面找找,可能就有你需要的工具方法。

Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

模块 介绍
hutool-aop JDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache 简单缓存实现
hutool-core 核心,包括Bean操作、日期、各种Util等
hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto 加密解密模块,提供对称、非对称和摘要算法封装
hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa 基于DFA模型的多关键字查找
hutool-extra 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http 基于HttpUrlConnection的Http客户端封装
hutool-log 自动识别日志实现的日志门面
hutool-script 脚本执行封装,例如Javascript
hutool-setting 功能更强大的Setting配置文件和Properties封装
hutool-system 系统参数调用封装(JVM信息等)
hutool-json JSON实现
hutool-captcha 图片验证码实现
hutool-poi 针对POI中Excel和Word的封装
hutool-socket 基于Java的NIO和AIO的Socket封装
hutool-jwt JSON Web Token (JWT)封装实现

可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。

二、安装

1.maven项目
在项目的pom.xml的dependencies中加入以下内容:
代码如下:

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

2.Gradle项目
代码如下:

implementation 'cn.hutool:hutool-all:5.7.13'

三、常用工具类

日期时间工具类 DateUtil

日期时间工具类,定义了一些常用的日期时间操作方法
代码如下:

//Date、long、Calendar之间的相互转换
//当前时间
Date date = DateUtil.date();
//Calendar转Date
date = DateUtil.date(Calendar.getInstance());
//时间戳转Date
date = DateUtil.date(System.currentTimeMillis());
//自动识别格式转换
String dateStr = "2017-03-01";
date = DateUtil.parse(dateStr);
//自定义格式化转换
date = DateUtil.parse(dateStr, "yyyy-MM-dd");
//格式化输出日期
String format = DateUtil.format(date, "yyyy-MM-dd");
//获得年的部分
int year = DateUtil.year(date);
//获得月份,从0开始计数
int month = DateUtil.month(date);
//获取某天的开始、结束时间
Date beginOfDay = DateUtil.beginOfDay(date);
Date endOfDay = DateUtil.endOfDay(date);
//计算偏移后的日期时间
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
//计算日期时间之间的偏移量
long betweenDay = DateUtil.between(date, newDate, DateUnit.DAY);

日期时间对象-DateTime

日期时间对象,DateTime对象包含众多的构造方法
代码如下:

//新建对象
Date date = new Date();
//new方式创建
DateTime time = new DateTime(date);
Console.log(time);
//of方式创建
DateTime now = DateTime.now();
DateTime dt = DateTime.of(date);//使用对象
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//年,结果:2017
int year = dateTime.year();
//季度(非季节),结果:Season.SPRING
Season season = dateTime.seasonEnum();
//月份,结果:Month.JANUARY
Month month = dateTime.monthEnum();
//日,结果:5
int day = dateTime.dayOfMonth();//对象的可变性
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);//默认情况下DateTime为可变对象,此时offset == dateTime
DateTime offset = dateTime.offset(DateField.YEAR, 0);
//设置为不可变对象后变动将返回新对象,此时offset != dateTime
dateTime.setMutable(false);
offset = dateTime.offset(DateField.YEAR, 0);// 格式化为字符串
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//结果:2017-01-05 12:34:23
String dateStr = dateTime.toString();
//结果:2017/01/05

类型转换工具类 Convert

类型转换工具类,用于各种类型数据的转换
代码如下:

//转换为字符串
int a = 1;
String aStr = Convert.toStr(a);
//转换为指定类型数组
String[] b = {"1", "2", "3", "4"};
Integer[] bArr = Convert.toIntArray(b);
//转换为日期对象
String dateStr = "2017-05-06";
Date date = Convert.toDate(dateStr);
//转换为列表
String[] strArr = {"a", "b", "c", "d"};
List<String> strList = Convert.toList(String.class, strArr);

字符串工具类 StrUtil

字符串工具类,定义了一些常用的字符串操作方法
代码如下:

//判断是否为空字符串
String str = "test";
StrUtil.isEmpty(str);
StrUtil.isNotEmpty(str);
//去除字符串的前后缀
StrUtil.removeSuffix("a.jpg", ".jpg");
StrUtil.removePrefix("a.jpg", "a.");
//格式化字符串
String template = "这只是个占位符:{}";
String str2 = StrUtil.format(template, "我是占位符");
LOGGER.info("/strUtil format:{}", str2);

数字处理工具类 NumberUtil

数字处理工具类,可用于各种类型数字的加减乘除操作及判断类型
代码如下:

double n1 = 1.234;
double n2 = 1.234;
double result;
//对float、double、BigDecimal做加减乘除操作
result = NumberUtil.add(n1, n2);
result = NumberUtil.sub(n1, n2);
result = NumberUtil.mul(n1, n2);
result = NumberUtil.div(n1, n2);
//保留两位小数
BigDecimal roundNum = NumberUtil.round(n1, 2);
String n3 = "1.234";
//判断是否为数字、整数、浮点数
NumberUtil.isNumber(n3);
NumberUtil.isInteger(n3);
NumberUtil.isDouble(n3);

JavaBean的工具类 BeanUtil

JavaBean的工具类,可用于Map与JavaBean对象的互相转换以及对象属性的拷贝
代码如下:

PmsBrand brand = new PmsBrand();
brand.setId(1L);
brand.setName("小米");
brand.setShowStatus(0);
//Bean转Map
Map<String, Object> map = BeanUtil.beanToMap(brand);
LOGGER.info("beanUtil bean to map:{}", map);
//Map转Bean
PmsBrand mapBrand = BeanUtil.mapToBean(map, PmsBrand.class, false);
LOGGER.info("beanUtil map to bean:{}", mapBrand);
//Bean属性拷贝
PmsBrand copyBrand = new PmsBrand();
BeanUtil.copyProperties(brand, copyBrand);
LOGGER.info("beanUtil copy properties:{}", copyBrand);

集合操作的工具类 CollUtil

集合操作的工具类,定义了一些常用的集合操作
代码如下:

//数组转换为列表
String[] array = new String[]{"a", "b", "c", "d", "e"};
List<String> list = CollUtil.newArrayList(array);
//join:数组转字符串时添加连接符号
String joinStr = CollUtil.join(list, ",");
LOGGER.info("collUtil join:{}", joinStr);
//将以连接符号分隔的字符串再转换为列表
List<String> splitList = StrUtil.split(joinStr, ',');
LOGGER.info("collUtil split:{}", splitList);
//创建新的Map、Set、List
HashMap<Object, Object> newMap = CollUtil.newHashMap();
HashSet<Object> newHashSet = CollUtil.newHashSet();
ArrayList<Object> newList = CollUtil.newArrayList();
//判断列表是否为空
CollUtil.isEmpty(list);

Map操作工具类 MapUtil

Map操作工具类,可用于创建Map对象及判断Map是否为空
代码如下:

//将多个键值对加入到Map中
Map<Object, Object> map = MapUtil.of(new String[][]{{"key1", "value1"},{"key2", "value2"},{"key3", "value3"}
});
//判断Map是否为空
MapUtil.isEmpty(map);
MapUtil.isNotEmpty(map);

数组工具-ArrayUtil

数组工具类主要是解决对象数组(包括包装类型数组)和原始类型数组使用方法不统一的问题
代码如下:

//判断空 和 非空
int[] a = {};
int[] b = null;
ArrayUtil.isEmpty(a);
ArrayUtil.isEmpty(b);//判断非空
int[] a = {1,2};
ArrayUtil.isNotEmpty(a);//新建泛型数组
String[] newArray = ArrayUtil.newArray(String.class, 3);//泛型数组调用原生克隆
Integer[] b = {1,2,3};
Integer[] cloneB = ArrayUtil.clone(b);
Assert.assertArrayEquals(b, cloneB);//非泛型数组(原始类型数组)调用第二种重载方法
int[] a = {1,2,3};
int[] clone = ArrayUtil.clone(a);
Assert.assertArrayEquals(a, clone);

唯一ID工具-IdUtil

唯一ID生成器的工具类,涵盖了:UUID 、 ObjectId(MongoDB)、Snowflake(Twitter)
代码如下:

// UUID
//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();//ObjectId
//生成类似:5b9e306a4df4f8c54a39fb0c
String id = ObjectId.next();//方法2:从Hutool-4.1.14开始提供
String id2 = IdUtil.objectId();//Snowflake
//参数1为终端ID
//参数2为数据中心ID
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id = snowflake.nextId();

IO工具类-IoUtil

IO工具类的存在主要针对InputStream、OutputStream、Reader、Writer封装简化,并对NIO相关操作做封装简化
代码如下:

//文件流拷贝
BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);

加密解密工具类 SecureUtil

加密解密工具类,可用于MD5加密
代码如下:

//MD5加密
String str = "123456";
String md5Str = SecureUtil.md5(str);
LOGGER.info("secureUtil md5:{}", md5Str);

验证码工具类 CaptchaUtil

验证码工具类,可用于生成图形验证码
代码如下:

//生成验证码图片
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
try {request.getSession().setAttribute("CAPTCHA_KEY", lineCaptcha.getCode());response.setContentType("image/png");//告诉浏览器输出内容为图片response.setHeader("Pragma", "No-cache");//禁止浏览器缓存response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expire", 0);lineCaptcha.write(response.getOutputStream());
} catch (IOException e) {e.printStackTrace();
}

分页工具-PageUtil

分页工具类并不是数据库分页的封装,而是分页方式的转换
代码如下:

//transToStartEnd 将页数和每页条目数转换为开始位置和结束位置。 此方法用于不包括结束位置的分页方法
int[] startEnd1 = PageUtil.transToStartEnd(0, 10);//[0, 10]
int[] startEnd2 = PageUtil.transToStartEnd(1, 10);//[10, 20]//根据总数计算总页数
int totalPage = PageUtil.totalPage(20, 3);//7

Java反射工具类 ReflectUtil

Java反射工具类,可用于反射获取类的方法及创建对象
代码如下:

//获取某个类的所有方法
Method[] methods = ReflectUtil.getMethods(PmsBrand.class);
//获取某个类的指定方法
Method method = ReflectUtil.getMethod(PmsBrand.class, "getId");
//使用反射来创建对象
PmsBrand pmsBrand = ReflectUtil.newInstance(PmsBrand.class);
//反射执行对象的方法
ReflectUtil.invoke(pmsBrand, "setId", 1);

注解工具类 AnnotationUtil

注解工具类,可用于获取注解与注解中指定的值
代码如下:

//获取指定类、方法、字段、构造器上的注解列表
Annotation[] annotationList = AnnotationUtil.getAnnotations(HutoolController.class, false);
LOGGER.info("annotationUtil annotations:{}", annotationList);
//获取指定类型注解
Api api = AnnotationUtil.getAnnotation(HutoolController.class, Api.class);
LOGGER.info("annotationUtil api value:{}", api.description());
//获取指定类型注解的值
Object annotationValue = AnnotationUtil.getAnnotationValue(HutoolController.class, RequestMapping.class);

ClassPath资源访问 ClassPathResource

获取classPath下的文件,在Tomcat等容器下,classPath一般是WEB-INF/classes
代码如下:

//获取定义在src/main/resources文件夹中的配置文件
ClassPathResource resource = new ClassPathResource("generator.properties");
Properties properties = new Properties();
properties.load(resource.getStream());
LOGGER.info("/classPath:{}", properties);

16进制工具-HexUtil

16进制一般针对无法显示的一些二进制进行显示,常用于: 1、图片的字符串表现形式 2、加密解密 3、编码转换
代码如下:

// HexUtil主要以encodeHex和decodeHex两个方法为核心,提供一些针对字符串的重载方法
String str = "我是一个字符串";String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);//hex是:
//e68891e698afe4b880e4b8aae5ad97e7aca6e4b8b2String decodedStr = HexUtil.decodeHexStr(hex);//解码后与str相同

URL工具-URLUtil

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。在Java中,也可以使用URL表示Classpath中的资源(Resource)地址
代码如下:

//获取URL对象
URLUtil.url 通过一个字符串形式的URL地址创建对象
URLUtil.getURL 主要获得ClassPath下资源的URL,方便读取Classpath下的配置文件等信息//URLUtil.normalize 标准化化URL链接。对于不带http://头的地址做简单补全
String url = "http://www.hutool.cn//aaa/bbb";
// 结果为:http://www.hutool.cn/aaa/bbb
String normalize = URLUtil.normalize(url);url = "http://www.hutool.cn//aaa/\\bbb?a=1&b=2";
// 结果为:http://www.hutool.cn/aaa/bbb?a=1&b=2
normalize = URLUtil.normalize(url);

随机工具-RandomUtil

RandomUtil主要针对JDK中Random对象做封装
代码如下:

//例如我们想产生一个[10, 100)的随机数
int c = RandomUtil.randomInt(10, 100);// 随机bytes,一般用于密码或者salt生成
byte[] c = RandomUtil.randomBytes(10);//随机获得列表中的一定量的不重复元素,返回Set
Set<Integer> set = RandomUtil.randomEleSet(CollUtil.newArrayList(1, 2, 3, 4, 5, 6), 2);RandomUtil.randomString 获得一个随机的字符串(只包含数字和字符)
RandomUtil.randomNumbers 获得一个只包含数字的字符串
RandomUtil.weightRandom 权重随机生成器,传入带权重的对象,然后根据权重随机获取对象

身份证工具-IdcardUtil

对身份证的验证主要是正则方式(位数,数字范围等)
代码如下:
工具中主要的方法包括:

isValidCard 验证身份证是否合法
convert15To18 身份证15位转18位
getBirthByIdCard 获取生日
getAgeByIdCard 获取年龄
getYearByIdCard 获取生日年
getMonthByIdCard 获取生日月
getDayByIdCard 获取生日天
getGenderByIdCard 获取性别
getProvinceByIdCard 获取省份

String ID_18 = "321083197812162119";
String ID_15 = "150102880730303";//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
boolean valid15 = IdcardUtil.isValidCard(ID_15);//转换
String convert15To18 = IdcardUtil.convert15To18(ID_15);
Assert.assertEquals(convert15To18, "150102198807303035");//年龄
DateTime date = DateUtil.parse("2017-04-10");int age = IdcardUtil.getAgeByIdCard(ID_18, date);
Assert.assertEquals(age, 38);int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
Assert.assertEquals(age2, 28);//生日
String birth = IdcardUtil.getBirthByIdCard(ID_18);
Assert.assertEquals(birth, "19781216");String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
Assert.assertEquals(birth2, "19880730");//省份
String province = IdcardUtil.getProvinceByIdCard(ID_18);
Assert.assertEquals(province, "江苏");String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
Assert.assertEquals(province2, "内蒙古");

信息脱敏工具-DesensitizedUtil

在数据处理或清洗中,可能涉及到很多隐私信息的脱敏工作,所谓脱敏就是隐藏掉信息中的一部分关键信息,用*代替
代码如下:

// 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);// 180****1999
DesensitizedUtil.mobilePhone("18049531999");// 比如密码,只保留了位数信息,**********
DesensitizedUtil.password("1234567890");

更多工具类

Hutool中的工具类很多,具体请参考Hutool官方网站:https://www.hutool.cn/

Hutool中 常用的工具类和方法相关推荐

  1. Android项目中常用的工具类集(史上最全整理)

    如果你是一名有经验的Android开发者,那么你一定积累了不少的工具类,这些工具类是帮助我们快速开发的基础.如果你是新手,那么有了这些辅助类,可以让你的项目做起来更加的简单. 下面介绍一个在GitHu ...

  2. 工具类的方法怎么引用_Hutool中那些常用的工具类和方法

    Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hutool中的常用工具类和方法进行介绍. ...

  3. java中常用的工具类

    1. 常用零散工具类 1.1[DateUtil.java]日期处理的工具类 /*** 时间日期处理工具* String -> Date* Date -> String* 以及生成含有日期的 ...

  4. java并发编程中常用的工具类 Executor

    /***************************************************  * TODO: description .  * @author: gao_chun  * ...

  5. java获取属性工具类,Java中常用的工具类总结

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 有了这些轮子,会使代码更加简洁,优美, 但是需要经常看看大佬的源码, 这样才会有进步! 不能光会用 ...

  6. 多线程总结-JUC中常用的工具类

    本文只记录JUC中较常用到的一些工具类,只是列举其常见的使用方法,至于其实现原理,此处不做说明. CountDownLatch 一个同步工具类,允许一个或多个线程一直等待,直到其他线程运行完成后再执行 ...

  7. Java并发中常用同步工具类

    为什么80%的码农都做不了架构师?>>>    同步工具类可以是任何一个对象,只要它根据其自身的状态来协调线程控制流.阻塞队列(BlockingQueue)可以作为同步工具类,其他类 ...

  8. java中常用的工具类(二)FtpUtil, 汉字转拼音,zip工具类,CollectionUtil,MathUtil,

    下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java package com.itjh.javaUtil;import java.io.File; import ...

  9. java 项目中常用的工具类总结

    1.文件 1.根据图片的链接,下载图片 package com.lingxu.module.BigDataJoinMessage.util;import java.io.FileOutputStrea ...

最新文章

  1. [NC15665]maze
  2. 博客会暂时停止一段时间
  3. ECMAScript5之Object学习笔记(二)
  4. wxWidgets:wxLocale类用法
  5. POSIX文件及目录管理
  6. cks子,间谍,局部Mo子和短管
  7. 用python os.system 执行 批处理的时候, 出现的一些问题
  8. 内存管理2(主讲MRR)
  9. 【光学】基于matlab夫琅禾费圆孔衍射【含Matlab源码 062期】
  10. php正则可以实现模糊匹配,正则表达式的模糊匹配功能如何实现
  11. 计算机一级学ug么,怎样才能学好UG从事电脑编程工作呢?进来看看必有收获!...
  12. FireMonkey v1.1的WinSoft WinRT-10.3-SEO-狼术
  13. 有趣好玩恶搞的C语言程序,有趣搞笑的整人VBS小脚本(整菜鸟专用)
  14. Android Studio Logcat 左边的工具栏不显示了 Show Toolbar
  15. cad打开卡死_AutoCAD程序启动就卡死的修复工具(解决CAD启动卡死不动)V2.00 修正版...
  16. 坦克大战java主要设计思想_坦克大战游戏Java网络版设计开题报告
  17. 笔记本电脑屏幕亮度无法调节
  18. 常见亲脂性细胞膜染料DiO, Dil, DiR, Did光谱图和实验操作流程
  19. Ubuntu18.04美化主题(mac主题)
  20. 标准盒模型 和怪异盒模型

热门文章

  1. AD原理图与封装创建
  2. Steema.TeeChart.NET Pro 4.2022.11.24 Crack
  3. LeetCode - 6. Zigzag Conversion (C)
  4. 关于PDF的相关操作-----PyPDF2
  5. 5G协议与信令(笔记)
  6. pm2启动后进程总是自启,日志显示App [app:0] starting in -fork mode
  7. redis--Linux环境下安装步骤
  8. 国际会计准则第16号--不动产、厂房和设备
  9. 欧债危机传染面再扩大 中国出口面临新冲击
  10. 错误解决:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token