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工具的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!