全网最详细Hutool工具详解

全网最详细Hutool工具详解

Hutool的目标是用一种工具方法来代替一段复杂的代码,从而最大程度上避免“复制粘贴”代码的问题,彻底改变我们编写代码的方式。本文主要介绍了Hutool工具在全文中最详细的讲解,有需要的朋友可以参考一下。

很多方法见官网地址:hutool官网地址。

我们下载:https://www.jb51.net/softs/549331.html

简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,让Java像函数式语言一样优雅,让Java语言变得“甜”。

Hutool中的工具方法来自于每一个用户的细致工作,它涵盖了Java开发底层代码的方方面面。它不仅是大型项目开发中解决小问题的利器,也是小型项目中的高效担当。

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

胡图族名字的由来

Hutool=Hu tool,是原公司底层代码剥离后的开源库。“胡”是公司的名字,而工具就是工具。Hutool谐音“糊涂”,一方面简洁易懂,另一方面又表示“难以糊涂”。

Hutool如何改变我们编码的方式?

Hutool的目标是用一种工具方法来代替一段复杂的代码,从而最大程度上避免“复制粘贴”代码的问题,彻底改变我们编写代码的方式。

以计算MD5为例:

【以前】打开搜索引擎——搜索“Java MD5加密”——打开博客——复制粘贴——修改后使用。

【现在】介绍Hutool-SecureUtil.md5()

Hutool的存在是为了降低代码搜索的成本,避免网络上参差不齐的代码造成的bug。

包含组件

一个Java基本工具类,封装了文件、流、加密和解密、代码转换、正则化、线程、XML等JDK方法。并形成各种Util工具类。同时,它提供了以下组件:

组件

介绍

胡图勒-aop

JDK动态代理封装提供了非IOC方面支持。

胡图尔-布鲁姆过滤器

Bloom filtering,它为Bloom filtering提供了一些哈希算法。

胡图尔缓存

简单缓存实现

胡图尔核心

核心,包括Bean操作,日期,各种Util等。

胡图尔克朗

定时任务模块,提供类似Crontab表达式的定时任务。

胡图-加密

加密模块,提供对称、非对称和抽象算法封装

胡图尔数据库

JDBC封装后的数据操作基于ActiveRecord的思想

胡图勒-dfa

基于DFA模型的多关键词搜索

hutool-extra

扩展模块,封装了第三方(模板引擎、邮件、Servlet、二维码、表情符号、FTP、分词等。)

hutool-http

基于HttpUrlConnection的Http客户端封装

胡图尔日志

识别自动日志实现的日志外观

胡图尔文字

脚本执行封装,比如Javascript。

湖塘环境

更强大的设置配置文件和属性封装

胡图尔系统

系统调用封装(JVM信息等。)

胡图尔-json

JSON实现

胡图尔-验证码

图像验证码实现

胡图尔波伊

POI中Excel和Word的封装

胡图尔插座

基于Java的NIO和AIO的套接字封装

专家

将以下内容添加到项目的pom.xml的依赖项中:

属国

groupIdcn.hutool/groupId

artifactIdhutool-all/artifactId

版本5 . 5 . 2/版本

/依赖关系

痛点

在Java开发中,我们要面对各种类型的转换问题,尤其是从命令行获取的用户参数,从HttpRequest获取的参数等。这些参数有各种类型。怎么才能转化他们呢?常见的方法是先将其整合成一个字符串,然后调用XXX.parseXXX方法。还承担着转换失败的风险,所以要加一层try catch,在业务代码中会非常难看臃肿。

Convert类

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

Java常见类型转换

1.转换为字符串:

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);

2.转换为指定类型的数组:

String[] b={ 1 , 2 , 3 , 4 };

//结果是一个整数数组

integer[]int array=convert . tointarray(b);

long[] c={1,2,3,4,5 };

//结果是一个整数数组

integer[]int array 2=convert . tointarray(c);

3.转换为日期对象:

字符串a= 2017-05-06 ;

日期值=convert . todate(a);

4.转换为集合

Object[] a={a , you , good ,,1 };

列表?list=convert . convert(list . class,a);

//从4.1.11开始可以这样用

列表?list=convert . to list(a);

其它类型转换

1.标准类型

任何类型都可以通过Convert.convert(Class,Object)方法转换为指定的类型。Hutool预定义了许多类型的转换,如转换到URI,网址,日历等。并且这些类型的转换都依赖于ConverterRegistry类。通过这个类和转换器接口,我们可以自定义一些类型转换。请参考“自定义类型转换”一节,了解。

2.泛型类型

使用convert (TypeReference reference,object value)方法,可以通过创建新的类型引用对象对嵌套泛型进行类型转换。比如我们要把一个对象转换成列表类型,那么传入的标准类就不能满足要求。这时,我们可以这样做:

Object[] a={a , you , good ,,1 };

ListString list=convert . convert(new TypeReferenceListString(){ },a);

通过实例化TypeReference和公式化泛型类型,我们可以将对象转换为所需的目标类型。

十六进制

很多加密解密,以及中文字符串传输(比如表单提交),都会用到十六进制转换,也就是HexUtil转换。为此,Hutool的专用门是用Hexutil工具类密封的。考虑到十六进制转换也是转换的一部分,其方法也放在Convert类中,比较好理解和查找。使用起来也很简单:

转换成十六进制字符串

String=我是小可爱string ;

//结果: e 68891 e 698 AFE 4b 80 E4 aae 5 b 08 Fe 5 b 08 Fe 79 a 84 e 58 fafe 788 b 1 e 79 a 84 e 5 ad 97 e 7a 7 ca 6 E4 b 8 b 2

String hex=Convert.toHex(a,CharsetUtil。CHARSET _ UTF _ 8);

将十六进制(hex)字符串转换为普通字符串:

string hex= e 68891 e 698 AFE 4b 880 E4 b 8 aa E5 b 08 Fe 5 b 08 Fe 79 a 84 e 58 fafe 788 B1 e 79 a 84 e 5 ad 97 e 7 ACA 6 e4b 8 b 2 ;

//结果是:‘我是小可爱串’

string raw=convert . hexstrtostr(hex,CharsetUtil。CHARSET _ UTF _ 8);

//注意:hexStrToStr在4.1.11之后会改名为hexToStr。

String raw=Convert.hexToStr(hex,CharsetUtil。CHARSET _ UTF _ 8);

因为字符串涉及编码问题,所以必须传入编码对象,这里使用的是UTF-8编码。toHex方法还支持传入的byte[],您也可以使用hexToBytes方法将十六进制转换为byte[]

Unicode和字符串转换

与十六进制类似,

Convert

类也可以在字符串和

Unicode

之间轻松转换:

String=我是小可爱string ;

//结果是: u 6211 U662F u4e 00 U4E2A U5C0F u 7684 U53EF u 7231 u 7684

string unicode=convert . strto unicode(a);

//结果是:‘我是小可爱串’

字符串raw=convert。unicodetostr(unicode):

编码转换

在接收表单的时候,我们常常被中文乱码所困扰,其实大多数原因是使用了不正确的编码方式解码了数据。于是

Convert.convertCharset

美元方法便派上用场了,它可以把乱码转为正确的编码方式:

字符串a=我不是乱码";

//转换后结果是为乱码

字符串结果=转换。转换字符集(a,CharsetUtil).UTF_8,CharsetUtil .ISO_8859_1:

字符串raw=convert。转换字符集(result,CharsetUtil).ISO_8859_1,‘utf-8’;

断言。断言平等(raw,a);

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

时间单位转换

Convert.convertTime

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

长a=4535345

//结果为:75

长分钟=Convert.convertTime(a,时间单位).毫秒,时间单位。分钟数;

金额大小写转换

面对财务类需求,010-5900将金钱数转换为大写形式:

双a=67556.32

//结果为:"陆万柒仟伍佰伍拾陆元叁角贰分我不知道

string digitupper case=convert。digittorgine(a);

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

原始类和包装类转换

有的时候,我们需要将包装类和原始类相互转换(比如整数类和内部类别、这时候我们可以:

//去包装

班?班?wrapclass=integer。班级

//结果为:int.class

班?班?展开=转换。unwrap(wrap class);

//包装

班?班?图元类=long.class:

//结果为:Long.class

班?班?wraped=转换。包装(图元类):

格式化为字符串

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

日期时间=新日期时间( 2017-01-05 12:34:23 ,日期模式).标准日期时间格式:

//结果:2017-01-05 12:34:23

dateStr=dateTime.toString()字符串:

//结果:2017年一月5日

LocalDateTime工具-LocalDateTimeUtil

使用

日期转换

日期字符串= 2020-01-23t 12:23:56 ;

datetime dt=date util。解析(日期字符串):

//日期对象转换为本地日期时间

local datetime of=localdatetimeutil。of(dt);

//时间戳转换为本地日期时间

of=localdatetimeutil。ofutc(dt。gettime());

日期字符串解析

//解析国际标准化组织标准时间

localdatetime本地datetime=localdatetimeutil。parse( 2020-01-23t 12:23:56 );

//解析自定义格式时间

local datetime=localdatetimeutil。parse( 2020-01-23 ,DatePattern).定额_日期_模式:

解析同样支持本地日期:

local date local date=localdatetimeutil。分析日期(“2020-01-23”);

//解析日期时间为当地时间,时间部分舍弃

localdate=localdatetimeutil。分析日期( 2020-01-23t 12:23:56 ,datetimeformatter).ISO _日期_时间:

日期格式化

localdatetime本地datetime=localdatetimeutil。parse( 2020-01-23t 12:23:56 );

-=ytet-伊甸园字幕组=-翻译:粒粒粒尘紫月猫姐风景校对:阿衡时间轴:邦德猪

string format=localdatetimeutil。格式(本地日期时间,日期模式).标准日期时间模式:

日期偏移

最终本地日期时间本地日期时间=本地日期时间。parse( 2020-01-23t 12:23:56 );

//增加一天

-=伊甸园美剧http://sfile。ydy。com=-荣誉出品本字幕仅供学习交流,严禁用于商业途径

local datetime offset=localdatetimeutil。偏移量(localdatetime,1,chronounit).天);

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

-=伊甸园美剧http://sfile。ydy。com=-荣誉出品本字幕仅供学习交流,严禁用于商业途径

offset=localdatetimeutil。偏移量(本地日期时间,-1,计时单位).天);

日期偏移

local datetime start=localdatetimeutil。parse( 2019-02-02t 00:00:00 );

local datetime end=localdatetimeutil。parse( 2020-02-02t 00:00:00 );

持续时间between=localdatetimeutil。介于(开始、结束):

//365

介于。todays();

一天的开始和结束

localdatetime本地datetime=localdatetimeutil。parse( 2020-01-23t 12:23:56 );

//2020-01-23T00:00

local datetime begin sofday=local datetime util。开始日期(local datetime);

//2020-01-23T23:59:59.999999

local datetime end fday=localdatetimeutil。end fday(local datetime);

字符串工具-StrUtil

Convert.digitToChinese

美元

这两个是去掉字符串的前缀后缀的,例如去个文件名的扩展名啥。

string fileName=strutil . remove suffix( pretty _ girl . jpg ,)。jpg )//文件名-漂亮女孩

还有removePrefixIgnoreCase和removeSuffixIgnoreCase忽略大小写,两者都很实用。

1.removePrefix、removeSuffix方法

这个方法不得不提。有人说String有subString,那为什么还写呢?我想说,如果subString方法越界了,就会报告异常,你得自己判断。很难受。我加了各种判断,index的位置也支持负数。-1表示最后一个字符(这个想法来自Python,如果你学过Python,你会很喜欢),如果你不小心把第一个位置和第二个位置搞混了,会自动纠正(比如可以截取第四个和第二个字符之间的部分~)。给我举个栗子。

String str= abcdefgh

string str sub 1=stru til sub(str,2,3);//strSub1 - c

string str sub 2=stru til sub(str,2,-3);//strSub2 - cde

string str sub 3=stru til sub(str,3,2);//strSub2 - c

2. sub方法

String template={}爱{},正如老鼠爱大米;

String=strutil.format (template, I , you );//str-我爱你,就像老鼠爱大米。

我将参数定义为对象类型,如果可以传递另一种类型,toString()方法将被自动调用。

Digester

以MD5为例:

Digester md5=新的消化器(DigestAlgorithm。MD5);

//5393554 e 94 BF 0 EB 6436 f 240 a4fd 71282

string digestHex=MD5 . digestHex(testStr);

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

//5393554 e 94 BF 0 EB 6436 f 240 a4fd 71282

string m D5 hex 1=digest util . m D5 hex(testStr);

Hutool-http

使用它最简单的方法是用HttpUtil工具类快速请求一个页面:

//获取请求

string content=http util . get(URL);

一行代码就可以做到,当然Post请求很简单:

//发布请求

HashMapString,Object param map=new HashMap();

Param.put (city , Beijing );

string result 1=http util . post(URL,param map);

Post请求只需要使用Map来预定义表单项。

关于Hutool工具最详细的解释,这篇文章就到这里了。有关Hutool工具的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

全网最详细Hutool工具详解