在 github 上见到过很多开源的自动化框架内都自带了很多 util 工具类,我们自己在开发自动化框架也必然需要用到工具类库,那么这样就会带来一些问题:
api的学习成本重复造轮子封装不完善带来的bug那么,有没有比较好的通用轮子让我们直接使用呢?当然有,今天我们来介绍一下工具类库—hutool
hutool是一个小而全的java工具类库,通过静态方法封装,降低相关api的学习成本,提高工作效率,使java拥有函数式语言般的优雅,让java语言也可以“甜甜的”。 hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
以上是摘自官网的介绍,如果我们有需要用到某些工具方法的时候,不妨在hutool里面找找。
官网地址:https://github.com/looly/hutool
一个java基础工具类,对文件、流、加密解密、转码、正则、线程、xml等jdk方法进行封装,组成各种util工具类,同时提供以下组件:
可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。
在项目的pom.xml的dependencies中加入以下内容:
<dependency> <groupid>cn.hutool</groupid> <artifactid>hutool-all</artifactid> <version>5.4.2</version></dependency>
compile 'cn.hutool:hutool-all:5.4.2'
点击以下任一链接,下载hutool-all-x.x.x.jar即可:
maven中央库1maven中央库2注意 hutool 5.x支持 jdk8+,对 android 平台没有测试,不能保证所有工具类或工具方法可用。 如果你的项目使用 jdk7,请使用 hutool 4.x 版本
类型转换工具类,用于各种类型数据的转换。
@test(description = "convert使用:类型转换工具类")public void covert() { int a = 1; string astr = convert.tostr(a); //转换为指定类型数组 string[] b = {"1", "2", "3", "4"}; integer[] barr = convert.tointarray(b); log.info(barr.tostring()); //转换为日期对象 string datestr = "2020-09-17"; date date = convert.todate(datestr); log.info(date.tostring()); //转换为列表 string[] strarr = {"a", "b", "c", "d"}; list<string> strlist = convert.tolist(string.class, strarr); log.info(strlist.tostring());}
运行结果:
[ljava.lang.integer;@4c0884e8thu p 17 00:00:00 cst 2020[a, b, c, d]
日期时间工具类,定义了一些常用的日期时间操作方法。
@test(description = "dateutil使用:日期时间工具")public void dateutil() { //date、long、calendar之间的相互转换 //当前时间 date date = dateutil.date(); log.info(date.tostring()); //calendar转date date = dateutil.date(calendar.getinstance()); //时间戳转date date = dateutil.date(system.currenttimemillis()); //自动识别格式转换 string datestr = "2020-09-17"; date = dateutil.par(datestr); //自定义格式化转换 date = dateutil.par(datestr, "yyyy-mm-dd"); //格式化输出日期 string format = dateutil.format(date, "yyyy-mm-dd"); log.info(format.tostring()); //获得年的部分 int year = dateutil.year(date); //获得月份,从0开始计数 int month = dateutil.month(date); //获取某天的开始、结束时间 date beginofday = dateutil.beginofday(date); date endofday = dateutil.endofday(date); //计算偏移后的日期时间 date newdate = dateutil.offt(date, datefield.day_of_month, 2); //计算日期时间之间的偏移量 long betweenday = dateutil.between(date, newdate, dateunit.day);}
运行结果:
2020-09-17 18:42:222020-09-17
字符串工具类,定义了一些常用的字符串操作方法。
@test(description = "strutil使用:字符串工具")public void strutil() { //判断是否为空字符串 string str = "test"; strutil.impty(str); strutil.isnotempty(str有关亲情的名言); //去除字符串的前后缀 strutil.removesuffix("a.jpg", ".jpg"); strutil.removeprefix("a.jpg", "a."); //格式化字符串 string template = "这只是个占位符:{}"; string str2 = strutil.format(template, "我是占位符"); log.info("/strutil format:{}", str2);}
运行结果:
/strutil format:这只是个占位符:我是占位符
获取 classpath 下的文件,在 tomcat 等容器下,classpath一般是 web-inf/class。
@test(description = "classpath单一资源访问类:在classpath下查找文件")public void classpath() throws ioexception { //获取定义在src/main/resources文件夹中的配置文件 classpathresource resource = new classpathresource("generator.properties"); properties properties = new properties(); properties.load(resource.getstream()); log.info("/classpath:{}", properties);}
运行结果:
/classpath:{jdbc.urid=root, jdbc.password=root, jdbc.driverclass=com.mysql.cj.jdbc.driver, jdbc.connectionurl=jdbc:mysql://localhost:3306/test?uunicode=true&characterencoding=utf-8&rvertimezone=asia/shanghai}
java反射工具类,可用于反射获取类的方法及创建对象。
@test(description = "reflectutil使用:java反射工具类")public void reflectutil() { //获取某个类的所有方法 method[] methods = reflectutil.getmethods(dog.class); //获取某个类的指定方法 method method = reflectutil.getmethod(dog.class, "getname"); //使用反射来创建对象 dog dog = reflectutil.newinstance(dog.class); //反射执行对象的方法 reflectutil.invoke(dog, "tname","大黄"); log.info(dog.getname());}
dog
data@builder@noargsconstructor@allargsconstructorpublic class dog { private string name; private float weight;}
运行结果:
大黄
数字处理工具类,可用于各种类型数字的加减乘除操作及判断类型。
@test(description = "numberutil使用:数字处理工具类")public void 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的工具类,可用于map与javabean对象的互相转换以及对象属性的拷贝。
@test(description = "beanutil使用:javabean的工具类")public void beanutil() { dog dog = new dog(); dog.tname("大黄"); dog.tweight(5.14f); //bean转map map<string, object> map = beanutil.beantomap(dog); log.info("beanutil bean to map:{}", map); //map转bean dog mapdog = beanutil.maptobean(map, dog.class, fal); log.info("beanutil map to bean:{}", mapdog); //bean属性拷贝 dog copydog = new dog(); beanutil.copyproperties(dog, copydog); log.info("beanutil copy properties:{}", copydog);}
运行结果:
beanutil bean to map:{name=大黄, weight=5.14}beanutil map to bean:dog(name=大黄, weight=5.14)beanutil copy properties:dog(name=大黄, weight=5.14)
集合操作的工具类,定义了一些常用的集合操作。
@test(description = "collutil使用:集合工具类")public void collutil() { //数组转换为列表 string[] array = new string[]{"a", "b", "c", "d", "e"}; list<string> list = collutil.newarraylist(array); //join:数组转字符串时添加连接符号 string joinstr = collutil.join(list, ","); log.info("collutil join:{}", joinstr); //将以连接符号分隔的字符串再转换为列表 list<string> splitlist = strutil.split(joinstr, ','); log.info("collutil split:{}", splitlist); //创建新的map、t、list hashmap<object, object> newmap = collutil.newhashmap(); hasht<object> newhasht = collutil.newhasht(); arraylist<object> newlist = collutil.newarraylist(); //判断列表是否为空 collutil.impty(list); collutil.isnotempty(list);}
运行结果:
collutil join:a,b,c,d,ecollutil split:[a, b, c, d, e]
map操作工具类,可用于创建 map 对象及判断 map 是否为空。
@test(description = "maputil使用:map工具类")public void maputil() { //将多个键值对加入到map中 map<object, object> map = maputil.of(new string[][]{ {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"} }); //判断map是否为空 maputil.impty(map); maputil.isnotempty(map);}
加密解密工具类,可用于 md5 加密。
@test(description = "cureutil使用:加密解密工具类")public void cureutil() { //md5加密 string str = "123456"; string md5str = cureutil.md5(str); log.info("cureutil md5:{}", md5str);}
运行结果:
cureutil md5:e10adc3949ba59abbe56e057f20f883e
验证码工具类,可用于生成图形验证码。
@test(description = "captchautil使用:图形验证码")public void captchautil(httprvletrequest request, httprvletrespon respon) { //生成验证码图片 linecaptcha linecaptcha = captchautil.createlinecaptcha(200, 100); try { request.getssion().tattribute("captcha_key", linecaptcha.getcode()); respon.tcontenttype("image/png");//告诉浏览器输出内容为图片 respon.theader("pragma", "no-cache");//禁止浏览器缓存 respon.theader("ca初中化学计算题及答案che-control", "no-cache"); respon.tdateheader("expire", 0); linecaptcha.write(respon.getoutputstream()); } catch (ioexception e) { e.printstacktrace(); }}
字段验证器,验证给定字符串是否满足指定条件,一般用在表单字段验证里。
@test(description = "validator使用:字段验证器")public void validator() { //判断是否为邮箱地址 boolean result = validator.imail("zuozewei@hotmail.com"); log.info("validator imail:{}", result); //判断是否为手机号码 result = validator.ismobile("18911111111"); log.info("validator ismobile:{}", result); //判断是否为ipv4地址 result = validator.isipv4("192.168.3.101"); log.info("validator isipv4:{}", result); //判断是否为汉字 result = validator.ischine("你好"); log.info("validator ischine:{}", result); //判断是否为身份证号码(18位中国) result = validator.iscitizenid("123456"); log.info("validator iscitizenid:{}", result); //判断是否为url result = validator.isurl("http://www.7d.com"); log.info("validator isurl:{}", result); //判断是否为生日 result = validator.isbirthday("2020-09-17"); log.info("validator isbirthday:{}", result);}
运行结果:
validator imail:truevalidator ismobile:truevalidator isipv4:truevalidator ischine:truevalidator iscitizenid:falvalidator isurl:truevalidator isbirthday:true
json 解析工具类,针对 jsonobject 和 jsonarray 的静态快捷方法集合。
@test(description = "jsonutil使用:json解析工具类")public void jsonutil() { dog dog = new dog(); dog.tname("大黄"); dog.tweight(5.14f); //对象转化为json字符串 string jsonstr = jsonutil.par(dog).tostring(); log.info("jsonutil par:{}", jsonstr); //json字符串转化为对象 dog dogbean = jsonutil.tobean(jsonstr, dog.class); log.info("jsonutil tobean:{}", dogbean); list<dog> doglist = new arraylist<>(); doglist.add(dog); string jsonliststr = jsonutil.par(doglist).tostring(); //json字符串转化为列表 doglist = jsonutil.tolist(new jsonarray(jsonliststr), dog.class); log.info("jsonutil tolist:{}", doglist);}
运行结果:
jsonutil par:{"weight":5.14,"name":"大黄"}jsonutil tobean:dog(name=大黄, weight=5.14)jsonutil tolist:[dog(name=大黄, weight=5.14)]
随机工具类,randomutil 主要针对 jdk 中 random 对象做封装。
@test(description = "randomutil使用:随机工具类")public void randomutil() { int result; string uuid; //获得指定范围内的随机数 result = randomutil.randomint(1, 100); log.info("randomint:{}",strutil.tostring(result)); //获得随机uuid uuid = randomutil.randomuuid(); log.info("randomuuid:{}", uuid);}
运行结果:
randomint:9randomuuid:8aec5890-72ab-4d72-a37d-d36acba83b58
摘要算法工具类,支持常见摘要算法 md2、md5、sha-1、sha-256、sha-384、sha-512等。
@test(description = "digestutil使用:摘要算法工具类")public void digestutil() { string password = "123456"; //计算md5摘要值,并转为16进制字符串 string result = digestutil.md5hex(password); log.info("digestutil md5hex:{}", result); //计算sha-256摘要值,并转为16进制字符串 result = digestutil.sha256hex(password); log.info("digestutil sha256hex:{}", result); //生成bcrypt加密后的密文,并校验 string hashpwd = digestutil.bcrypt(passwtrainord); boolean check = digestutil.bcryptcheck(password,hashpwd); log.info("digestutil bcryptcheck:{}", check);}
运行结果:
digestutil md5hex:e10adc3949ba59abbe56e057f20f883edigestutil sha256hex:8d969eef6ecad3c29a3a6292感动中国2018年度人物80e686cf0c3f5d5a86aff3ca12020c923adc6c92digestutil bcryptcheck:true
http客户端工具类,应对简单场景下http请求的工具类封装,此工具封装了httprequest对象常用操作,可以保证在一个方法之内完成http请求。
此模块基于jdk的httpurlconnection封装完成,完整支持https、代理和文件上传。
@test(description = "httputil使用:http请求工具类")public void httputil() { string respon = httputil.get("http://example.com/"); log.info("httputil get:{}", respon);}
运行结果:
2020-09-17 18:48:27.328 info 12004 --- [ main] com.zuozewei.demo.example.example : httputil get:<!doctype html><html><head> <title>example domain</title> <崩怎么组词meta chart="utf-8" /> <meta http-equiv="content-type" content="text/html; chart=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, blinkmacsystemfont, "goe ui", "open sans", "helvetica neue", helvetica, arial, sans-rif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head><body><div> <h1>example domain</h1> <p>this domain is for u in illustrative examples in documents. you may u this domain in literature without prior coordination or asking for permission.</p> <p><a href="https://www.iana.org/domains/example">more information...</a></p></div></body></html>
hutool中的工具类很多
测试开发过程中要善于半开源,半代码的方式,节省开发时间,合理利用轮子,提高工作效率。
本文发布于:2023-04-05 05:53:06,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/d699cd3c6aab7235362344729106ede5.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:jdbc工具类报错(静态代码扫描工具).doc
本文 PDF 下载地址:jdbc工具类报错(静态代码扫描工具).pdf
留言与评论(共有 0 条评论) |