目录
一、认识hutool工具类库
二、引入hutool 工具类库依赖
三、 hutool 工具类库-常用
最常用的工具类
BeanUtil :
核心工具类
Convert:类型转换工具类
DateUtil:日期时间工具类
StrUtil:字符串工具类
NumberUtil:数字工具类
CollUtil:集合工具类
ArrayUtil:数组工具类
MapUtil:Map工具类
ClassUtil:类工具类
ReflectUtil:反射工具类
加密解密
SecureUtil:安全相关工具类,提供MD5、SHA、AES等算法
DigestUtil:摘要算法工具类
JSON
JSONUtil:JSON解析和生成工具类
四、hutool 工具类库-不常用
XML
XmlUtil:XML解析工具类
IO
IoUtil:IO流工具类
FileUtil:文件工具类
CharsetUtil:编码工具类
ZipUtil:压缩工具类
HttpClient
HttpUtil:HTTP客户端工具类
HttpsUtil:HTTPS客户端工具类
缓存
CacheUtil:缓存工具类
数据库
动态数据库
DSFactory:动态数据源工厂
DS:动态数据源
验证码
CaptchaUtil:验证码工具类
其他
BloomFilter:布隆过滤器
ClipboardUtil:剪贴板工具类
IdUtil:ID生成器工具类
RuntimeUtil:运行时工具类
SystemUtil:系统信息工具类
一、认识hutool工具类库
Hutool是一个小而全的Java工具类库,它简化了Java开发中的很多复杂操作,提供了大量的工具方法。Hutool的设计哲学是尽量减少重复的定义,让Java开发变得更加轻松和高效。
Hutool工具包的一些特点:
-
全面性:Hutool涵盖了Java开发中常用的工具类,比如字符串处理、日期时间处理、各种集合操作、文件和流处理等。
-
实用性:Hutool提供的工具方法贴近实际开发需求,能够有效提升开发效率。
-
轻量级:Hutool没有依赖其他第三方库,体积小巧,便于集成。
-
一致性:Hutool的API设计遵循统一的风格,便于上手和使用。
Hutool的主要功能模块包括但不限于:
- 核心:提供最基础的工具类,如Object工具类、日期工具类、数组工具类等。
- 加密解密:简化Java中加密解密操作,支持对称加密、非对称加密、摘要算法等。
- JSON:简化JSON操作,支持JSON字符串与JavaBean的相互转换。
- 日期时间:强大的日期时间工具类,简化日期时间的转换和处理。
- 数据库:简化数据库操作,支持数据库连接池管理。
- 设置:提供高效的设置文件和属性文件操作。
- 日志:提供分级别日志记录,简化日志管理。
- Http客户端:简化Http请求操作,支持同步和异步请求。
二、引入hutool 工具类库依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version></dependency>
三、 hutool 工具类库-常用
最常用的工具类
-
BeanUtil
:
// 创建一个 Map,其中包含要填充到 User 对象的属性值Map<String, Object> map = new HashMap<>();map.put("username", "张三");map.put("age", 18);// 创建一个 User 对象User user = new User();// 使用 BeanUtil.fillBeanWithMap 方法填充 User 对象的属性BeanUtil.fillBeanWithMap(map,user,true);System.out.println(user);//使用 BeanUtil.beanToMap 方法将 User 对象转换为 MapMap<String,Object> newUser = BeanUtil.beanToMap(user);System.out.println(newUser);// 使用BeanUtil.copyProperties方法将 User 对象复制到另一个 User 对象User user2 = new User();BeanUtil.copyProperties(user, user2);System.out.println(user2);
核心工具类
-
Convert
:类型转换工具类
示例代码:
// 将字符串转换为整数int intVal = Convert.toInt("12345");System.out.println("字符串 '12345' 转换为整数: " + intVal); // 预期输出: 字符串 '12345' 转换为整数: 12345// 将字符串转换为长整型long longVal = Convert.toLong("123456789012345");System.out.println("字符串 '123456789012345' 转换为长整型: " + longVal); // 预期输出: 字符串 '123456789012345' 转换为长整型: 123456789012345// 将字符串转换为浮点数double doubleVal = Convert.toDouble("123.456");System.out.println("字符串 '123.456' 转换为浮点数: " + doubleVal); // 预期输出: 字符串 '123.456' 转换为浮点数: 123.456// 将字符串转换为布尔值boolean boolVal = Convert.toBool("true");System.out.println("字符串 'true' 转换为布尔值: " + boolVal); // 预期输出: 字符串 'true' 转换为布尔值: true// 将数组转换为集合String[] strArray = {"a", "b", "c"};List<String> strList = Convert.toList(String.class, strArray);System.out.println("数组转换为集合: " + strList); // 预期输出: 数组转换为集合: [a, b, c]// 将集合转换为数组String[] arrayFromList = Convert.toStrArray(strList);System.out.println("集合转换为数组: " + Arrays.toString(arrayFromList)); // 预期输出: 集合转换为数组: [a, b, c]
-
DateUtil
:日期时间工具类
// 获取当前时间System.out.println("当前时间:" + DateUtil.now()); // 输出当前时间字符串// 解析日期时间字符串String dateStr = "2024-08-04 12:30:45";System.out.println("解析日期时间字符串:" + DateUtil.parse(dateStr)); // 输出解析后的日期时间// 格式化日期时间System.out.println("格式化当前时间:" + DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss")); // 按指定格式输出当前时间// 计算日期时间差String startDateStr = "2024-08-01 00:00:00";String endDateStr = "2024-08-04 12:30:45";long betweenDay = DateUtil.between(DateUtil.parse(startDateStr), DateUtil.parse(endDateStr), DateUnit.DAY);System.out.println("两个日期之间的天数差:" + betweenDay); // 输出两个日期之间的天数差// 日期时间偏移System.out.println("当前时间加一天:" + DateUtil.offsetDay(DateUtil.date(), 1)); // 输出当前时间加一天后的日期// 获取月份的第一天和最后一天System.out.println("当前月份的第一天:" + DateUtil.beginOfMonth(DateUtil.date())); // 输出当前月份的第一天System.out.println("当前月份的最后一天:" + DateUtil.endOfMonth(DateUtil.date())); // 输出当前月份的最后一天
-
StrUtil
:字符串工具类
// 检查字符串是否为空boolean isEmpty = StrUtil.isEmpty(" "); // 空格字符串System.out.println("字符串是否为空(包括空格):" + isEmpty); // 预期输出:true// 检查字符串是否为空白boolean isBlank = StrUtil.isBlank(" "); // 空格字符串System.out.println("字符串是否为空白:" + isBlank); // 预期输出:true// 去除字符串两端的空格String trimmedStr = StrUtil.trim(" Hello Hutool! ");System.out.println("去除两端空格后的字符串:" + trimmedStr); // 预期输出:Hello Hutool!// 拼接字符串;String joinedStr = StrUtil.join(",", "a", "b", "c");System.out.println("拼接后的字符串:" + joinedStr); // 预期输出:a,b,c// 字符串长度int length = StrUtil.length("Hello Hutool!");System.out.println("字符串长度:" + length); // 预期输出:13// 首字母大写String capitalizedStr = StrUtil.upperFirst("hello hutool!");System.out.println("首字母大写后的字符串:" + capitalizedStr); // 预期输出:Hello hutool!// 首字母小写String uncapitalizedStr = StrUtil.lowerFirst("HELLO HUTOOL!");System.out.println("首字母小写后的字符串:" + uncapitalizedStr); // 预期输出:hELLO HUTOOL!// 判断字符串是否包含子串boolean contains = StrUtil.contains("Hello Hutool!", "Hutool");System.out.println("字符串是否包含子串 'Hutool':" + contains); // 预期输出:true// 判断字符串是否以特定子串开头boolean startsWith = StrUtil.startWith("Hello Hutool!", "Hello");System.out.println("字符串是否以 'Hello' 开头:" + startsWith); // 预期输出:true// 判断字符串是否以特定子串结尾boolean endsWith = StrUtil.endWith("Hello Hutool!", "Hutool!");System.out.println("字符串是否以 'Hutool!' 结尾:" + endsWith); // 预期输出:true
-
NumberUtil
:数字工具类
// 字符串转数字String numStr = "123.456";double num = NumberUtil.parseDouble(numStr);System.out.println("字符串转double:" + num); // 预期输出:123.456// 数字格式化String formattedNum = NumberUtil.decimalFormat("0.00", num);System.out.println("格式化数字:" + formattedNum); // 预期输出:123.46// 数字四舍五入double roundedNum = NumberUtil.round(num, 2);System.out.println("四舍五入后的数字:" + roundedNum); // 预期输出:123.46// 计算百分比double percentage = NumberUtil.percent(50, 200);System.out.println("50是200的百分比:" + percentage + "%"); // 预期输出:25%// 判断是否为数字boolean isNumber = NumberUtil.isNumber("123.456");System.out.println("字符串 '123.456' 是否为数字:" + isNumber); // 预期输出:true// 判断是否为整数boolean isInteger = NumberUtil.isInteger("123");System.out.println("字符串 '123' 是否为整数:" + isInteger); // 预期输出:true// 判断是否为素数boolean isPrime = NumberUtil.isPrime(17);System.out.println("数字 17 是否为素数:" + isPrime); // 预期输出:true// 数字范围限定int limitedNum = NumberUtil.range(100, 0, 200);System.out.println("数字100限定在0到200之间:" + limitedNum); // 预期输出:100// 数字相加double sum = NumberUtil.add(10.5, 20.3);System.out.println("10.5和20.3的和:" + sum); // 预期输出:30.8// 数字相减double subtract = NumberUtil.sub(20.3, 10.5);System.out.println("20.3减去10.5的结果:" + subtract); // 预期输出:9.8
-
CollUtil
:集合工具类
// 字符串转数字String numStr = "123.456";double num = NumberUtil.parseDouble(numStr);System.out.println("字符串转double:" + num); // 预期输出:123.456// 数字格式化String formattedNum = NumberUtil.decimalFormat("0.00", num);System.out.println("格式化数字:" + formattedNum); // 预期输出:123.46// 数字四舍五入BigDecimal roundedNum = NumberUtil.round(num, 2);System.out.println("四舍五入后的数字:" + roundedNum); // 预期输出:123.46// 判断是否为数字boolean isNumber = NumberUtil.isNumber("123.456");System.out.println("字符串 '123.456' 是否为数字:" + isNumber); // 预期输出:true// 判断是否为整数boolean isInteger = NumberUtil.isInteger("123");System.out.println("字符串 '123' 是否为整数:" + isInteger); // 预期输出:true// 判断是否为素数boolean isPrime = NumberUtil.isPrimes(17);System.out.println("数字 17 是否为素数:" + isPrime); // 预期输出:true// 数字范围限定int[] limitedNum = NumberUtil.range(0, 200, 80);System.out.println("数字80限定在0到200之间:" + Arrays.toString(limitedNum)); // 预期输出:[0, 80, 160]// 数字相加double sum = NumberUtil.add(10.5, 20.3);System.out.println("10.5和20.3的和:" + sum); // 预期输出:30.8// 数字相减double subtract = NumberUtil.sub(20.3, 10.5);System.out.println("20.3减去10.5的结果:" + subtract); // 预期输出:9.8
-
ArrayUtil
:数组工具类
// 创建一个数组int[] intArray = {1, 2, 3, 4, 5};// 获取数组长度int length = ArrayUtil.length(intArray);System.out.println("数组长度:" + length); // 预期输出:5// 获取数组第一个元素int firstElement = ArrayUtil.get(intArray, 0);System.out.println("数组第一个元素:" + firstElement); // 预期输出:1// 获取数组最后一个元素int lastElement = ArrayUtil.get(intArray, length - 1);System.out.println("数组最后一个元素:" + lastElement); // 预期输出:5// 检查数组是否包含某个元素boolean contains = ArrayUtil.contains(intArray, 3);System.out.println("数组是否包含元素 3:" + contains); // 预期输出:trueArrayUtil.isSorted(intArray);System.out.println("排序后的数组:" + Arrays.toString(intArray)); // 预期输出:[1, 2, 3, 4, 5]// 数组反转int[] reversedArray = ArrayUtil.reverse(intArray);System.out.println("反转后的数组:" + Arrays.toString(reversedArray)); // 预期输出:[5, 4, 3, 2, 1]
-
MapUtil
:Map工具类
// 创建一个 MapMap<String, Object> map = MapUtil.createMap(HashMap.class);// 向 Map 中添加元素map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");// 获取 Map 中的元素Object value1 = map.get("key1");System.out.println("获取元素 value1:" + value1); // 预期输出:value1// 检查 Map 是否包含某个键boolean containsKey = map.containsKey("key2");System.out.println("Map 是否包含键 key2:" + containsKey); // 预期输出:true// 检查 Map 是否包含某个值boolean containsValue = map.containsValue("value2");System.out.println("Map 是否包含值 value2:" + containsValue); // 预期输出:true// 删除 Map 中的元素map.remove("key1");// 清空 Mapmap.clear();// 检查 Map 是否为空boolean isEmpty = MapUtil.isEmpty(map);System.out.println("Map 是否为空:" + isEmpty); // 预期输出:true
-
ClassUtil
:类工具类
// 获取 Class 对象Class<?> clazz = ClassUtil.getClass(String.class);System.out.println("获取 Class 对象:" + clazz); // 预期输出:class java.lang.String// 获取 Class 对象的字符串表示String className = ClassUtil.getClassName(String.class,true);System.out.println("获取 Class 对象的字符串表示:" + className); // 预期输出:String// 获取 Class 对象的类名String simpleName = ClassUtil.getClassName(String.class,true);System.out.println("获取 Class 对象的类名:" + simpleName); // 预期输出:String// 获取 Class 对象的包名String packageName = com.fasterxml.jackson.databind.util.ClassUtil.getPackageName(String.class);System.out.println("获取 Class 对象的包名:" + packageName); // 预期输出:java.lang
-
ReflectUtil
:反射工具类
// 获取 User 类的字段Field[] fieldNames = ReflectUtil.getFields(User.class);System.out.println("获取 User 类的字段名:" + Arrays.toString(fieldNames));// 获取方法信息Method[] methods = ReflectUtil.getMethods(User.class);System.out.println("获取 User 类的方法信息:" + Arrays.toString(methods));// 获取构造方法信息Constructor<?>[] constructors = ReflectUtil.getConstructors(User.class);System.out.println("获取 User 类的构造方法信息:" + Arrays.toString(constructors));
加密解密
-
SecureUtil
:安全相关工具类,提供MD5、SHA、AES等算法
// 使用 MD5 算法进行加密String md5 = SecureUtil.md5("password");System.out.println("MD5 加密结果:" + md5);// 使用 SHA 算法进行加密String sha1 = SecureUtil.sha1("password");System.out.println("SHA1 加密结果:" + sha1);// 使用 SHA-256 算法进行加密String sha256 = SecureUtil.sha256("password");System.out.println("SHA-256 加密结果:" + sha256);
-
DigestUtil
:摘要算法工具类
// 使用 MD5 算法进行摘要String md5 = DigestUtil.md5Hex("password");System.out.println("MD5 摘要结果:" + md5);// 使用 SHA-1 算法进行摘要String sha1 = DigestUtil.sha1Hex("password");System.out.println("SHA-1 摘要结果:" + sha1);
JSON
-
JSONUtil
:JSON解析和生成工具类
// 创建一个 JSONObject 对象JSONObject jsonObject = new JSONObject();jsonObject.put("name", "张三");jsonObject.put("age", 25);jsonObject.put("email", "zhangsan@example.com");// 将 JSONObject 对象转换为 JSON 字符串String jsonStr = JSONUtil.toJsonStr(jsonObject);System.out.println("JSON 字符串:" + jsonStr);// 将 JSON 字符串转换为 JSONObject 对象JSONObject parsedJson = JSONUtil.parseObj(jsonStr);System.out.println("解析后的 JSONObject:" + parsedJson);// 将 JSON 字符串转换为 Java 对象User user = JSONUtil.toBean(jsonStr, User.class);System.out.println("解析后的 Java 对象:" + user);
四、hutool 工具类库-不常用
XML
-
XmlUtil
:XML解析工具类
IO
-
IoUtil
:IO流工具类 -
FileUtil
:文件工具类 -
CharsetUtil
:编码工具类 -
ZipUtil
:压缩工具类
HttpClient
-
HttpUtil
:HTTP客户端工具类 -
HttpsUtil
:HTTPS客户端工具类
缓存
-
CacheUtil
:缓存工具类
数据库
DbUtil
:数据库操作工具类DbRuntimeException
:数据库异常
动态数据库
-
DSFactory
:动态数据源工厂 -
DS
:动态数据源
验证码
-
CaptchaUtil
:验证码工具类
其他
-
BloomFilter
:布隆过滤器 -
ClipboardUtil
:剪贴板工具类 -
IdUtil
:ID生成器工具类 -
RuntimeUtil
:运行时工具类 -
SystemUtil
:系统信息工具类