1、日期工具
通过DateUtil类,提供高度便捷的日期访问、处理和转换方式。
2、HTTP客户端
通过HttpUtil对HTTP客户端的封装,实现便捷的HTTP请求,并简化文件上传操作。
3、转换工具
通过Convert类中的相应静态方法,提供一整套的类型转换解决方案,并通过ConverterRegistry工厂类自定义转换。
4、配置文件工具(SETTING)
通过Setting对象,提供兼容Properties文件的更加强大的配置文件工具,用于解决中文、分组等JDK配置文件存在的诸多问题。
5、日志工具
Hutool的日志功能,通过抽象Log接口,提供对Slf4j、LogBack、Log4j、JDK-Logging的全面兼容支持。
6、JDBC工具类(DB模块)
通过db模块,提供对MySQL、Oracle等关系型数据库的JDBC封装,借助ActiveRecord思想,大大简化数据库操作。
布隆过滤
缓存
克隆接口
类型转换
日期处理
数据库ORM(基于ActiveRecord思想)
基于DFA有限自动机的多个关键字查找
HTTP客户端
IO和文件
有用的一些数据结构
日志
反射代理类的简化(AOP切面实现)
Setting(一种扩展Properties的配置文件)
System(JVM和系统信息等)
WatchService的封装(文件变动监控)
XXXUtil各种有用的工具类
注意Hutool工具包只支持JDK7+,对应Android平台也并不支持。
子模块
每个子模块可以被单独引入使用,修改左边名字为artifactId即可。如果想引入所有模块,可以引入hutool-all即可。
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-geo GeoHash封装
hutool-json JSON实现
通过Maven引入项目
RELEASE版本引用
在项目的pom.xml的dependencies中加入以下内容:
cn.hutoolhutool-all4.0.12
SNAPSHOT版本引用
添加SNAPSHOT支持:
org.sonatype.ossoss-parent9
引用SNAPSHOT版本的库
cn.hutoolhutool-all4.0.13-SNAPSHOT
通过Gradle引入项目
compile 'cn.hutool:hutool-all:4.0.12'
工具包的版本可以通过 http://search.maven.org/ 搜索hutool-all找到项目。
非Maven项目
直接下载jar包
可以从http://search.maven.org/ 搜索hutool-all找到项目,点击对应版本,下面是相应的Jar包,导入即可使用。
一键直达:http://search.maven.org/#search%7Cga%7C1%7Chutool-all
如果中央库访问不便,可以访问阿里云的资源:
http://maven.aliyun.com/nexus/content/groups/public/cn/hutool/hutool-all/
自行编译安装
访问Hutool的码云主页:https://gitee.com/loolly/hutool 下载整个项目源码(v4-master或v4-dev分支都可)然后进入Hutool项目目录执行:
bin/hutool.sh install
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:
1、减少代码录入。
2、常用功能组合起来,实现一个功能只用一个方法。
3、简化Java API,原来需要几个类实现的功能我也只是用一个类甚至一个方法(想想为了个线程池我得new多少类……而且名字还不好记)
4、对于null的处理我没有可以回避,而是采取“你给我null我也给你返回null”这种思想,尽量不在工具类里抛空指针异常(这思想稍猥琐啊……直接把包袱扔给调用者了,好吧,谁让你给我null了)。
5、一些固定使用的算法收集到一起,不用每次问度娘了(例如Base64算法、MD5、Sha-1,还有Hash算法)
6、借鉴Python的很多小技巧(例如列表切片,列表支持负数index),让Java更加好用。7、非常好用的ORM框架,同样借鉴Python的Django框架,以键值对的实体代替对象实体,大大降低数据库访问的难度(再也不用像Hibernate一样配置半天ORM Mapping了)。
8、极大简化了文件、日期的操作,尤其是相对路径和绝对路径问题做了非常好的封装,降低学习成本。