返回顶部
首页 > 资讯 > 精选 >Hutool工具包含哪些组件
  • 655
分享到

Hutool工具包含哪些组件

2023-06-21 22:06:45 655人浏览 八月长安
摘要

本篇内容主要讲解“Hutool工具包含哪些组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hutool工具包含哪些组件”吧!简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降

本篇内容主要讲解“Hutool工具包含哪些组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hutool工具包含哪些组件”吧!

简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关api的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

Hutool名称的由来
Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

Hutool如何改变我们的coding方式
Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。

以计算MD5为例:

【以前】打开搜索引擎 -> 搜“Java MD5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用
【现在】引入Hutool -> SecureUtil.md5()
Hutool的存在就是为了减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug。

包含组件

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

模块介绍
hutool-aopJDK动态代理封装,提供非ioc下的切面支持
hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache简单缓存实现
hutool-core核心,包括Bean操作、日期、各种Util等
hutool-cron定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC封装后的数据操作,基于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-JSONjsON实现
hutool-captcha图片验证码实现
hutool-poi针对POI中excelWord的封装
hutool-Socket基于Java的NIOaiO的Socket封装

Maven
在项目的pom.xml的dependencies中加入以下内容:

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

痛点

在Java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从HttpRequest获取的Parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成String,然后调用XXX.parseXXX方法,还要承受转换失败的风险,不得不加一层try catch,这个小小的过程混迹在业务代码中会显得非常难看和臃肿。

Convert类

Convert类可以说是一个工具方法类,里面封装了针对Java常见类型的转换,用于简化类型转换。Convert类中大部分方法为toXXX,参数为Object,可以实现将任意可能的类型转换为指定类型。同时支持第二个参数defaultValue用于在转换失败时返回一个默认值。

Java常见类型转换

转换为字符串

int a = 1;//aStr为"1"String aStr = Convert.toStr(a);long[] b = {1,2,3,4,5};//bStr为:"[1, 2, 3, 4, 5]"String bStr = Convert.toStr(b);

转换为指定类型数组

String[] b = { "1", "2", "3", "4" };//结果为Integer数组Integer[] intArray = Convert.toIntArray(b);long[] c = {1,2,3,4,5};//结果为Integer数组Integer[] intArray2 = Convert.toIntArray(c);

转换为日期对象:

String a = "2017-05-06";Date value = Convert.toDate(a);

转换为集合

Object[] a = {"a", "你", "好", "", 1};List<?> list = Convert.convert(List.class, a);//从4.1.11开始可以这么用List<?> list = Convert.toList(a);

其它类型转换

1.标准类型
通过Convert.convert(Class, Object)方法可以将任意类型转换为指定类型,Hutool中预定义了许多类型转换,例如转换为URI、URL、Calendar等等,这些类型的转换都依托于ConverterReGIStry类。通过这个类和Converter接口,我们可以自定义一些类型转换。详细的使用请参阅“自定义类型转换”一节。

2.泛型类型
通过convert(TypeReference reference, Object value)方法,自行new一个TypeReference对象可以对嵌套泛型进行类型转换。例如,我们想转换一个对象为List类型,此时传入的标准Class就无法满足要求,此时我们可以这样:

Object[] a = { "a", "你", "好", "", 1 };List<String> list = Convert.convert(new TypeReference<List<String>>() {}, a);

通过TypeReference实例化后制定泛型类型,即可转换对象为我们想要的目标类型。

16进制(Hex)

在很多加密解密,以及中文字符串传输(比如表单提交)的时候,会用到16进制转换,就是Hex转换,为此Hutool中专门封装了HexUtil工具类,考虑到16进制转换也是转换的一部分,因此将其方法也放在Convert类中,便于理解和查找,使用同样非常简单:

转为16进制(Hex)字符串

String a = "我是一个小小的可爱的字符串";//结果:"e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2"String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);

将16进制(Hex)字符串转为普通字符串:

String hex = "e68891e698afe4b880e4b8aae5b08fe5b08fe79a84e58fafe788b1e79a84e5ad97e7aca6e4b8b2";//结果为:"我是一个小小的可爱的字符串"String raw = Convert.hexStrToStr(hex, CharsetUtil.CHARSET_UTF_8);//注意:在4.1.11之后hexStrToStr将改名为hexToStrString raw = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);

因为字符串牵涉到编码问题,因此必须传入编码对象,此处使用UTF-8编码。 toHex方法同样支持传入byte[],同样也可以使用hexToBytes方法将16进制转为byte[]

Unicode和字符串转换

与16进制类似,Convert类同样可以在字符串和Unicode之间轻松转换:

String a = "我是一个小小的可爱的字符串";//结果为:"\\u6211\\u662f\\u4e00\\u4e2a\\u5c0f\\u5c0f\\u7684\\u53ef\\u7231\\u7684\\u5b57\\u7b26\\u4e32"    String unicode = Convert.strToUnicode(a);//结果为:"我是一个小小的可爱的字符串"String raw = Convert.unicodeToStr(unicode);

编码转换

在接收表单的时候,我们常常被中文乱码所困扰,其实大多数原因是使用了不正确的编码方式解码了数据。于是Convert.convertCharset方法便派上用场了,它可以把乱码转为正确的编码方式:

String a = "我不是乱码";//转换后result为乱码String result = Convert.convertCharset(a, CharsetUtil.UTF_8, CharsetUtil.ISO_8859_1);String raw = Convert.convertCharset(result, CharsetUtil.ISO_8859_1, "UTF-8");Assert.assertEquals(raw, a);

注意 经过测试,UTF-8编码后用GBK解码再用GBK编码后用UTF-8解码会存在某些中文转换失败的问题。

时间单位转换

Convert.convertTime方法主要用于转换时长单位,比如一个很大的毫秒,我想获得这个毫秒数对应多少分:

long a = 4535345;//结果为:75long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);

金额大小写转换

面对财务类需求,Convert.digitToChinese将金钱数转换为大写形式:

double a = 67556.32;//结果为:"陆万柒仟伍佰伍拾陆元叁角贰分"String digitUppercase = Convert.digitToChinese(a);

注意 转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略。

原始类和包装类转换

有的时候,我们需要将包装类和原始类相互转换(比如Integer.class 和 int.class),这时候我们可以:

//去包装Class<?> wrapClass = Integer.class;//结果为:int.classClass<?> unWraped = Convert.unWrap(wrapClass);//包装Class<?> primitiveClass = long.class;//结果为:Long.classClass<?> wraped = Convert.wrap(primitiveClass);

格式化为字符串

调用toString()方法即可返回格式为yyyy-MM-dd HH:mm:ss的字符串,调用toString(String fORMat)可以返回指定格式的字符串。

DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);//结果:2017-01-05 12:34:23String dateStr = dateTime.toString();//结果:2017/01/05

LocalDateTime工具-LocalDateTimeUtil

使用

日期转换

String dateStr = "2020-01-23T12:23:56";DateTime dt = DateUtil.parse(dateStr);// Date对象转换为LocalDateTimeLocalDateTime of = LocalDateTimeUtil.of(dt);// 时间戳转换为LocalDateTimeof = LocalDateTimeUtil.ofUTC(dt.getTime());

日期字符串解析

// 解析ISO时间LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");// 解析自定义格式时间localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);

解析同样支持LocalDate:

LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23");// 解析日期时间为LocalDate,时间部分舍弃localDate = LocalDateTimeUtil.parseDate("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME);

日期格式化

LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");// "2020-01-23 12:23:56"String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);

日期偏移

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");// 增加一天// "2020-01-24T12:23:56"LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS);

如果是减少时间,offset第二个参数传负数即可:

// "2020-01-22T12:23:56"offset = LocalDateTimeUtil.offset(localDateTime, -1, ChronoUnit.DAYS);

日期偏移

LocalDateTime start = LocalDateTimeUtil.parse("2019-02-02T00:00:00");LocalDateTime end = LocalDateTimeUtil.parse("2020-02-02T00:00:00");Duration between = LocalDateTimeUtil.between(start, end);// 365between.toDays();

一天的开始和结束

LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");// "2020-01-23T00:00"LocalDateTime beginOfDay = LocalDateTimeUtil.beginOfDay(localDateTime);// "2020-01-23T23:59:59.999999999"LocalDateTime endOfDay = LocalDateTimeUtil.endOfDay(localDateTime);

字符串工具-StrUtil

1.removePrefix、removeSuffix方法
这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名啥。

String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg")  //fileName -> pretty_girl

还有忽略大小写的removePrefixIgnoreCase和removeSuffixIgnoreCase都比较实用。
2. sub方法
不得不提一下这个方法,有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常,你还得自己判断,难受死了,我把各种情况判断都加进来了,而且index的位置还支持负数哦,-1表示最后一个字符(这个思想来自于python,如果学过Python的应该会很喜欢的),还有就是如果不小心把第一个位置和第二个位置搞反了,也会自动修正(例如想截取第4个和第2个字符之间的部分也是可以的哦~) 举个栗子

String str = "abcdefgh";String strSub1 = StrUtil.sub(str, 2, 3); //strSub1 -> cString strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cdeString strSub3 = StrUtil.sub(str, 3, 2); //strSub2 -> c

3.format方法

String template = "{}爱{},就像老鼠爱大米";String str = StrUtil.format(template, "我", "你"); //str -> 我爱你,就像老鼠爱大米

参数我定义成了Object类型,如果传别的类型的也可以,会自动调用toString()方法的。

Digester

以MD5为例:

Digester md5 = new Digester(DigestAlGorithm.MD5);// 5393554e94bf0eb6436f240a4fd71282String digestHex = md5.digestHex(testStr);

当然,做为最为常用的方法,MD5等方法被封装为工具方法在DigestUtil中,以上代码可以进一步简化为:

// 5393554e94bf0eb6436f240a4fd71282String md5Hex1 = DigestUtil.md5Hex(testStr);

Hutool-http

最简单的使用莫过于用HttpUtil工具类快速请求某个页面:

//GET请求String content = HttpUtil.get(url);

一行代码即可搞定,当然Post请求也很简单:

//POST请求HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("city", "北京");String result1 = HttpUtil.post(url, paramMap);

Post请求只需使用Map预先制定form表单项即可。

到此,相信大家对“Hutool工具包含哪些组件”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Hutool工具包含哪些组件

本文链接: https://lsjlt.com/news/301040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hutool工具包含哪些组件
    本篇内容主要讲解“Hutool工具包含哪些组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hutool工具包含哪些组件”吧!简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降...
    99+
    2023-06-21
  • Hadoop主要组件包含哪些
    这篇文章主要介绍“Hadoop主要组件包含哪些”,在日常操作中,相信很多人在Hadoop主要组件包含哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hadoop主要组件包含...
    99+
    2024-04-02
  • Java工具包Hutool的使用分析
    这篇文章给大家介绍Java工具包Hutool的使用分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Hutool 。它是一个功能丰富的 Java 工具包。它帮助我们实现了常用的工具方法,从而减少代码的体积,提高开发效率...
    99+
    2023-06-05
  • Teradata架构中包含的组件有哪些
    Teradata架构中包含的组件主要包括: Parsing Engine:负责接收用户请求,解析SQL语句,进行优化和查询计划生成...
    99+
    2024-04-09
    Teradata
  • React组件文档化工具有哪些
    这篇文章主要介绍了React组件文档化工具有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如果没有人能够理解并找到如何使用我们的组件,那它们有什么用呢?React鼓励我们...
    99+
    2023-06-14
  • vue打包工具有哪些
    vue中的打包工具有:1.parcel,于vue的Web应用打包工具;2.Weex,可以使用现代化的Web技术开发高性能原生应用的框架;3.webpack,基于vue的模块打包器;vue中常见的打包工具有以下几种parcelparcel是一...
    99+
    2024-04-02
  • PHP文件包含哪些漏洞
    这篇文章主要介绍了PHP文件包含哪些漏洞的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP文件包含哪些漏洞文章都会有所收获,下面我们一起来看看吧。漏洞描述文件包含漏洞的产生原因是在通过PHP的函数引入文件时,...
    99+
    2023-06-30
  • golang包管理工具有哪些
    golang中的包管理工具有:1.go mod,golang1.11版本中的官方包管理工具;2.govendor,golang的依赖包管理工具;3.godep,golang官方的依赖管理工具;4.Module,golang官方提供的包管理工...
    99+
    2024-04-02
  • pytorch常用工具包有哪些
    本文小编为大家详细介绍“pytorch常用工具包有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytorch常用工具包有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、pytorch 简介Pytor...
    99+
    2023-07-05
  • PHP包含文件函数有哪些
    在PHP中,有以下几种方法可以包含文件:1. include():该函数会包含指定的文件,并在包含过程中产生警告和错误,但不会导致脚...
    99+
    2023-09-26
    PHP
  • oracle数据库包含哪些文件
    oracle 数据库包含以下文件类型:数据文件:存储数据和元数据。日志文件:记录更改以保持一致性,包括重做和撤消日志文件。控制文件:存储结构和配置信息。参数文件:包含操作配置参数。临时表...
    99+
    2024-04-19
    oracle
  • 文件包含漏洞检测工具fimap有什么用
    小编给大家分享一下文件包含漏洞检测工具fimap有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!文件包含漏洞检测工具fimap在Web应用中,文件包含漏洞(FI)是常见的漏洞。根据包含的文件不同,它分为本地文件包含漏...
    99+
    2023-06-04
  • 探究 Golang 架构中都包含了哪些重要组件?
    Golang 是一种由 Google 开发的开源编程语言,以其高效、简洁的特性受到广泛欢迎。在 Golang 架构中,包含了多个重要组件,这些组件在程序的设计和开发过程中起着至关重要的...
    99+
    2024-03-02
    接口 内存管理 并发
  • Spring Boot Docker打包工具有哪些
    这篇文章给大家分享的是有关Spring Boot Docker打包工具有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。springboot是什么springboot一种全新的编程规范,其设计目的是用来简化新S...
    99+
    2023-06-14
  • FreeBSD支持哪些包管理工具
    FreeBSD支持以下几种包管理工具: pkg - FreeBSD默认的包管理工具,用于安装、升级和删除软件包 ports - F...
    99+
    2024-04-02
  • Java 打包同步工具推荐:哪些工具最实用?
    在 Java 开发中,打包和同步代码是非常常见的任务。对于一些大型项目来说,这些任务可能会消耗大量的时间和精力。为了提高效率和减少手动操作的错误,使用一些自动化的工具来完成这些任务是非常必要的。在本文中,我们将介绍几个 Java 打包同步...
    99+
    2023-06-20
    打包 同步 unix
  • Linux文件工具有哪些
    本篇内容主要讲解“Linux文件工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux文件工具有哪些”吧!1.diff命令我喜欢先介绍这款最初的Unix命令行工具,它为你显示了两个计...
    99+
    2023-06-15
  • C++头文件中包含哪些内容
    C++头文件中包含哪些内容,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C++头文件之C、传统 C++ #include < assert.h&g...
    99+
    2023-06-17
  • 免费的CSS UI工具包有哪些
    这篇文章主要介绍了免费的CSS UI工具包有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇免费的CSS UI工具包有哪些文章都会有所收获,下面我们一起来看看吧。 Sema...
    99+
    2024-04-02
  • Java中Lang包的工具类有哪些
    今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Lang 中工具类比较多,这里介绍几个主要的:  ClassUtils: ...
    99+
    2023-05-31
    java lang ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作