Java工具包Hutool

  • Java工具包Hutool已关闭评论
  • 1,174 views
  • A+
所属分类:未分类

今天给大家分享一个Java开源工具类集合。对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,让大家在开发过程节省不少时间,而且代码更简洁。

Java工具包Hutool

简介

Hutool是Hu + tool的自造词,前者致敬我的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。

Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。

Java工具包Hutool

功能

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

  • hutool-aop JDK动态代理封装,提供非IOC下的切面支持
  • hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
  • hutool-cache 缓存
  • hutool-core 核心,包括Bean操作、日期、各种Util等
  • hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
  • hutool-crypto 加密解密模块
  • hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
  • hutool-dfa 基于DFA模型的多关键字查找
  • hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
  • hutool-http 基于HttpUrlConnection的Http客户端封装
  • hutool-log 自动识别日志实现的日志门面
  • hutool-script 脚本执行封装,例如Javascript
  • hutool-setting 功能更强大的Setting配置文件和Properties封装
  • hutool-system 系统参数调用封装(JVM信息等)
  • hutool-json JSON实现
  • hutool-captcha 图片验证码实现

 

核心(Hutool-core)
克隆
支持泛型的克隆接口和克隆类
类型转换
类型转换工具类-Convert
自定义类型转换-ConverterRegistry
日期时间
概述
日期时间工具-DateUtil
日期时间对象-DateTime
IO
概述
IO工具类-IoUtil
文件工具类-FileUtil
文件类型判断-FileTypeUtil
文件监听-WatchMonitor
ClassPath资源访问-ClassPathResource
文件读取-FileReader
文件写入-FileWriter
工具类
概述
数组工具-ArrayUtil
字符编码工具-CharsetUtil
类工具-ClassUtil
类加载工具-ClassLoaderUtil
Escape工具-EscapeUtil
16进制工具-HexUtil
Hash算法-HashUtil
身份证工具-IdcardUtil
图片工具-ImageUtil
数字工具-NumberUtil
网络工具-NetUtil
分页工具-PageUtil
随机工具-RandomUtil
对象工具-ObjectUtil
字符串工具-StrUtil
线程工具-ThreadUtil
正则工具-ReUtil
URL工具-URLUtil
XML工具-XmlUtil
压缩工具-ZipUtil
反射工具-ReflectUtil
命令行工具-RuntimeUtil
剪贴板工具-ClipboardUtil
枚举工具-EnumUtil
引用工具-ReferenceUtil
泛型类型工具-TypeUtil
语言特性
单例工具-Singleton
有界优先队列-BoundedPriorityQueue
字段验证器-Validator
控制台打印封装-Console
二进码十进数-BCD
HashMap扩展-Dict
字符串格式化-StrFormatter
字符串切割-StrSpliter
断言-Assert
JavaBean
概述
Bean工具-BeanUtil
DynaBean
表达式解析-BeanResolver
集合类
概述
集合工具-CollUtil
Iterator工具-IterUtil
Map工具
概述
Map工具-MapUtil
Codec编码
Base64编码解码-Base64
Base32编码解码-Base32
配置文件(Hutool-setting)
配置文件模块概述
设置文件-Setting
Properties扩展-Props
日志(Hutool-log)
Log模块概述
日志工厂-LogFactory
静态调用日志-StaticLog
疑惑解答
缓存(Hutool-cache)
概述
CacheUtil
FIFOCache
LFUCache
LRUCache
TimedCache
WeakCache
FileCache
JSON(Hutool-json)
概述
JSONObject
JSONArray
JSONUtil
加密解密(Hutool-crypto)
概述
对称加密-SymmetricCrypto
非对称加密-AsymmetricCrypto
签名和验证-Sign
摘要加密-Digester和HMac
加密解密工具-SecureUtil
DFA查找(Hutool-dfa)
概述
DFA查找
数据库(Hutool-db)
概述
数据源工厂-DsFactory
简单CRUD-SqlRunner
支持事务的CRUD-Session
SQL执行器-SqlExecutor
数据源配置db.setting样例
案例1-导出Blob字段图像
http客户端(Hutool-http)
概述
Http客户端工具类-HttpUtil
Http客户端-HttpRequest
Http响应封装-HttpResponse
常用Http状态码-HttpStatus
HTML工具类-HtmlUtil
栗子-爬取开源中国的开源资讯
定时任务(Hutool-cron)
定时任务模块概述
扩展(Hutool-extra)
概述
Beetl模板引擎工具-BeetlUtil
Velocity工具-VelocityUtil
邮件工具-MailUtil
Servlet工具-ServletUtil
二维码工具-QrCodeUtil
SSH工具-JschUtil
布隆过滤(Hutool-bloomFilter)
概述
切面(Hutool-aop)
概述
脚本(Hutool-script)
概述
Script工具-ScriptUtil
Office文档操作(Hutool-poi)
概述
ExcelUtil
Excel读取-ExcelReader
流方式读取Excel2007-Excel07SaxReader
流方式读取Excel2003-Excel03SaxReader
Excel生成-ExcelWriter
系统调用(Hutool-system)
图形验证码(Hutool-captcha)

。。。等等。我就不一一列举了。

设计哲学

1. 方法优先于对象

在工具类中,往往以静态方法为主。方法集中在一个类中,配合IDE查找使用起来是十分便利的。于是Hutool将JDK中许多的类总结抽象为一个方法,这一原则使用最多的就是流的相关方法,这些方法很好的隐藏了XXXInputStream、XXXReader等的复杂性。

2. 自动识别优于用户定义

其实很多时候,有些参数、设置等是没有必要我们自己传入的,完全可以靠逻辑判断自动完成。一个方法很多时候明明只需要传3个参数,我们非要传4个,这多出的一个参数本身就是代码的一种冗余。

这一原则在Hutool的各个角落都有所体现,尤为明显的比如log模块。构建日志对象的时候,很明显类名可以动态获取,何必让使用者再传入呢?再比如在db模块的数据库配置中,数据库驱动命名完全可以根据连接字符串判断出来,何必要让用户传入?这些问题的在Hutool中都有非常好的封装,而这一原则也渐渐变成Hutool哲学的一部分。

3. 便捷性与灵活性并存

所谓便捷性,就是我们在调用一个方法的时候参数要尽量少,只传必要参数即可,非必要参数使用默认值即可(想想一个方法一堆参数的时候,调用者晕头转向不知所云)。

所谓灵活性正好与便捷性相反,要让一个方法的参数尽量多,为用户灵活的操作方法提供最大可能性。

这两个原则看似矛盾,其实只是针对不同场景设定的而已,缺一不可。便捷性强调拿来即用,为快速开发提供可能;灵活性强调最大限度调优,为性能调优和扩展提供便利。

这一原则在针对编码问题上体现尤为突出,我们的大部分方法都是默认“UTF-8”编码的,这也是我们推荐的编码方式,推荐大部分项目使用的编码。但是一旦有遗留项目使用了类似“GBK”等编码,没关系,我们提供在相关方法中提供Charset对象参数,可以自定义编码。这样使用这一原则就兼顾了各种项目的情况。

4. 适配与兼容

在Hutool中,适配器模式运用特别广泛,log模块适配主流各大框架,db模块适配主流各种连接池和关系数据库。这种适配一是提高灵活性,二是可以很好的兼容各大框架,让Hutool可以在各种复杂项目环境中生存的很好。

适配兼容产生的另一个原则是:你有我配,你无我有。说白了就是:如果你项目中有这个框架,我可以完美适配,如果你没有引入任何框架,Hutool自身实现了一些逻辑可以很好的工作。

5. 可选依赖原则

在Java项目中依赖常常是个头疼的问题,不同的框架强依赖另一些框架或包,虽然Maven可以很好的处理冲突问题,但是项目底下满满的依赖jar包,是不是无形中拖慢了项目,也增加了复杂性和不确定性?而很多时候,我们是不是只是为了用一个小小的方法,就要引入一个第三方包,谁喜欢这样臃肿的项目?

Hutool中也会有一些依赖,但是全部都是optional的,在使用中不会关联依赖,而这些依赖只有在使用者使用到时才会调用,这时可能会报ClassNotFoundException,不用担心,我们自己引入即可。为什么要这样做呢?以VelocityUtil这个工具类为例,使用Velocity的人占比极少,我们不能为了这些用户而强引入Velocity包,而使用这个工具类的人应该明白,我们应该自己引入这个包。

而更多时候,我们需要用到某个方法时,我的做法是将方法拷贝到项目中(Hutool中的方法正在不断积累),类似于Apache Commons中的方法,Hutool中基本都有取代方法,完全不必要引入。

可选依赖原则让我们的项目更加精简,问题也更容易排查。

6. 无侵入原则

Hutool始终是一个工具类而不是框架,这意味着它对项目的侵入几乎为零,每个方法都是可被代替的,甚至整个Hutool也是可被替换的。这种无侵入性,让使用者可以更加放心的在项目中引入,也保证了与其它框架完美的兼容。

安装

Maven

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

<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>4.0.8</version>
</dependency>
  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar