目录
一、简介
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
- Web开发
- 与其它框架无耦合
- 高度可替换
二、设计哲学与优势
设计哲学
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:
- 方法优先于对象
- 自动识别优于用户定义
- 便捷性与灵活性并存
- 适配与兼容
- 可选依赖原则
- 无侵入原则
优势
其余工具跟Huttol相比,有哪些不足:
- Apache全家桶:英文注释,方法使用需要查
- Guava:Jar包很大,API别扭
- Jodd:与Hutool最相似,功能不齐全
- Nutz:工具方法很好用,但是是一个框架
- Voovan:工具方法很好用,解决了IO问题优先,应用场景不宽
三、安装
🍊Maven引用全量
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.2</version> </dependency>
🍊Maven按需引用
例如引用hutool-aop
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-aop</artifactId> <version>5.8.2</version> </dependency>
🍐Gradle引用
implementation 'cn.hutool:hutool-all:5.8.2'
四、组件
组件包描述
一个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 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) hutool-http 基于HttpUrlConnection的Http客户端封装 hutool-log 自动识别日志实现的日志门面 hutool-script 脚本执行封装,例如Javascript hutool-setting 功能更强大的Setting配置文件和Properties封装 hutool-system 系统参数调用封装(JVM信息等) hutool-json JSON实现 hutool-captcha 图片验证码实现 hutool-poi 针对POI中Excel和Word的封装 hutool-socket 基于Java的NIO和AIO的Socket封装 hutool-jwt JSON Web Token (JWT)封装实现 可以根据需求对每个模块单独引入,也可以通过引入
hutool-all
方式引入所有模块。组件包详细描述
Package Description cn.hutool Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 cn.hutool.aop JDK动态代理封装,提供非IOC下的切面支持 cn.hutool.aop.aspects 切面实现,提供一些基本的切面实现 cn.hutool.aop.interceptor 代理拦截器实现 cn.hutool.aop.proxy 代理实现 cn.hutool.bloomfilter 布隆过滤,提供一些Hash算法的布隆过滤 cn.hutool.bloomfilter.bitMap BitMap实现 cn.hutool.bloomfilter.filter 各种Hash算法的过滤器实现 cn.hutool.cache 提供简易的缓存实现,此模块参考了jodd工具中的Cache模块 cn.hutool.cache.file 提供针对文件的缓存实现 cn.hutool.cache.impl 提供各种缓存实现 cn.hutool.captcha 图片验证码实现 cn.hutool.captcha.generator 验证码生成策略实现 cn.hutool.core Hutool核心方法及数据结构包 cn.hutool.core.annotation 注解包,提供增强型注解和注解工具类 cn.hutool.core.bean Bean相关操作,包括Bean信息描述,Bean路径表达式、动态Bean、Bean工具等 cn.hutool.core.bean.copier Bean拷贝实现,包括拷贝选项等 cn.hutool.core.bean.copier.provider Bean值提供者方式封装 cn.hutool.core.builder 建造者工具 用于建造特定对象或结果 cn.hutool.core.clone 克隆封装 cn.hutool.core.codec BaseN以及BCD编码封装 cn.hutool.core.collection 集合以及Iterator封装,包括集合工具CollUtil,Iterator和Iterable工具IterUtil cn.hutool.core.comparator 各种比较器(Comparator)实现和封装 cn.hutool.core.compiler 运行时编译java源码,动态从字符串或外部文件加载类 cn.hutool.core.compress 压缩解压封装 cn.hutool.core.convert 万能类型转换器以及各种类型转换的实现类,其中Convert为转换器入口,提供各种toXXX方法和convert方法 cn.hutool.core.convert.impl 各种类型转换的实现类,其都为Converter接口的实现,用于将未知的Object类型转换为指定类型 cn.hutool.core.date 日期封装,日期的核心为DateTime类,DateUtil提供日期操作的入口 cn.hutool.core.date.chinese 农历相关类汇总,包括农历月、天干地支、农历节日、24节气等 cn.hutool.core.date.format 提供线程安全的日期格式的格式化和解析实现 cn.hutool.core.exceptions 特殊异常封装,同时提供异常工具ExceptionUtil cn.hutool.core.getter getXXX方法的接口和抽象实现 cn.hutool.core.img 图像处理相关工具类封装 cn.hutool.core.img.gif GIF处理,来自:https://github.com/rtyley/animated-gif-lib-for-java cn.hutool.core.io IO相关封装和工具类,包括Inputstream和OutputStream实现类,工具包括流工具IoUtil、文件工具FileUtil和Buffer工具BufferUtil cn.hutool.core.io.checksum IO校验相关库和工具 cn.hutool.core.io.checksum.crc16 CRC16相关算法封装为Checksum cn.hutool.core.io.copy IO流拷贝相关封装相关封装 cn.hutool.core.io.file 对文件读写的封装,包括文件拷贝、文件读取、文件写出、行处理等 cn.hutool.core.io.file.visitor FileVisitor功能性实现,包括递归删除、拷贝等 cn.hutool.core.io.resource 针对ClassPath和文件中资源读取的封装,主要入口为工具类ResourceUtil cn.hutool.core.io.unit 数据单位相关封装,包括DataUnit数据单位和DataSize数据大小 cn.hutool.core.io.watch 基于JDK7+ WatchService的文件和目录监听封装,支持多级目录 cn.hutool.core.io.watch.watchers 文件监听中的观察者实现类,包括延迟处理、处理链等 cn.hutool.core.lang 语言特性包,包括大量便捷的数据结构,例如验证器Validator,分布式ID生成器Snowflake等 cn.hutool.core.lang.ansi 命令行终端中ANSI 转义序列相关封装,如ANSI颜色等 cn.hutool.core.lang.caller 调用者接口及实现。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用 cn.hutool.core.lang.copier 拷贝抽象实现,通过抽象拷贝,可以实现文件、流、Buffer之间的拷贝实现 cn.hutool.core.lang.func 函数封装 接口灵感来自于ActFramework 一个函数接口代表一个一个函数,用于包装一个函数为对象 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 cn.hutool.core.lang.generator 提供生成器接口及相关封装 cn.hutool.core.lang.hash 提供Hash算法的封装 cn.hutool.core.lang.id 提供各种ID生成 cn.hutool.core.lang.intern 规范化表示形式封装 所谓规范化,即当两个对象equals时,规范化的对象则可以实现== 此包中的相关封装类似于 String#intern() cn.hutool.core.lang.loader 加载器的抽象接口和实现,包括懒加载的实现等 cn.hutool.core.lang.mutable 提供可变值对象的封装,用于封装int、long等不可变值,使其可变 cn.hutool.core.lang.reflect 提供反射相关功能对象和类 cn.hutool.core.lang.tree 提供通用树生成,特点: cn.hutool.core.lang.tree.parser cn.hutool.core.map Map相关封装,提供特殊Map实现以及Map工具MapUtil cn.hutool.core.map.multi 多参数类型的Map实现,包括集合类型值的Map和Table cn.hutool.core.math 提供数学计算相关封装,包括排列组合等,入口为MathUtil cn.hutool.core.net 网络相关工具 cn.hutool.core.net.multipart 文件上传封装 cn.hutool.core.net.url URL相关工具 cn.hutool.core.stream Java8的stream相关封装 cn.hutool.core.swing Swing和awt相关封装 cn.hutool.core.swing.clipboard 剪贴板相关的工具,包括剪贴板监听等 cn.hutool.core.text 提供文本相关操作的封装,还包括Unicode工具UnicodeUtil cn.hutool.core.text.csv 提供CSV文件读写的封装,入口为CsvUtil 规范见:https://datatracker.ietf.org/doc/html/rfc4180 cn.hutool.core.text.escape 提供各种转义和反转义实现 cn.hutool.core.text.finder 文本查找实现,包括: 查找文本中的字符(正向、反向) 查找文本中的匹配字符(正向、反向) 查找文本中的字符串(正向、反向) 查找文本中匹配正则的字符串(正向) cn.hutool.core.text.replacer 文本替换类抽象及实现 cn.hutool.core.text.split cn.hutool.core.thread 提供线程及高并发封装,入口为ThreadUtil cn.hutool.core.thread.lock 锁的实现 cn.hutool.core.thread.threadlocal ThreadLocal相关封装 cn.hutool.core.util 提供各种工具方法,按照归类入口为XXXUtil,如字符串工具StrUtil等 cn.hutool.cron 定时任务模块,提供类Crontab表达式的定时任务,实现参考了Cron4j,同时可以支持秒级别的定时任务定义和年的定义(同时兼容Crontab、Cron4j、Quartz表达式) 定时任务模块由三部分组成: Scheduler 定时任务调度器,用于整体管理任务的增删、启停和触发运行。 Task 定时任务实现,用于定义具体的任务 CronPattern 定时任务表达式,用于定义任务触发时间 同时,提供了CronUtil工具类,维护一个全局的Scheduler。 cn.hutool.cron.listener 定时任务执行监听接口及部分实现 cn.hutool.cron.pattern 定时任务表达式解析,核心为CronPattern cn.hutool.cron.pattern.matcher 定时任务表达式匹配器,内部使用 单一表达式使用PatternMatcher表示 PatternMatcher由7个PartMatcher组成, 分别表示定时任务表达式中的7个位置: cn.hutool.cron.pattern.parser 定时任务表达式解析器,内部使用 cn.hutool.cron.task 定时任务中作业的抽象封装和实现,包括Runnable实现和反射实现 Task表示一个具体的任务,当满足时间匹配要求时,会执行Task.execute()方法。 cn.hutool.cron.timingwheel 时间轮实现,重写了kafka的TimingWheel 时间轮一般会实现成一个环形结构,类似一个时钟,分为很多槽,一个槽代表一个时间间隔,每个槽使用双向链表存储定时任务。指针周期性地跳动,跳动到一个槽位,就执行该槽位的定时任务。 cn.hutool.crypto 加密解密模块,实现了对JDK中加密解密算法的封装,入口为SecureUtil,实现了: cn.hutool.crypto.asymmetric 非对称加密的实现,包括RSA等 cn.hutool.crypto.digest 摘要加密算法实现,入口为DigestUtil cn.hutool.crypto.digest.mac HMAC,全称为“Hash Message Authentication Code”,中文名“散列消息鉴别码” 主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。 一般的,消息鉴别码用于验证传输于两个共 同享有一个密钥的单位之间的消息。 HMAC 可以与任何迭代散列函数捆绑使用。MD5 和 SHA-1 就是这种散列函数。HMAC 还可以使用一个用于计算和确认消息鉴别值的密钥。 cn.hutool.crypto.digest.otp OTP 是 One-Time Password的简写,表示一次性密码。 cn.hutool.crypto.symmetric 对称加密算法实现,包括AES、DES、DESede等 cn.hutool.crypto.symmetric.fpe cn.hutool.db Hutool-db是一个在JDBC基础上封装的数据库操作工具类,通过包装,使用ActiveRecord思想操作数据库。 在Hutool-db中,使用Entity(本质上是个Map)代替Bean来使数据库操作更加灵活,同时提供Bean和Entity的转换提供传统ORM的兼容支持。 cn.hutool.db.dialect 数据库方言封装,包括数据库方言以及方言自动识别等 cn.hutool.db.dialect.impl 数据库方言实现,包括MySQL、Oracle、PostgreSQL、Sqlite3、H2、SqlServer2012等 cn.hutool.db.ds 数据源封装,对各类数据库连接池的封装 cn.hutool.db.ds.bee BeeCP封装 见:https://github.com/Chris2018998/BeeCP cn.hutool.db.ds.c3p0 C3P0封装 cn.hutool.db.ds.dbcp DBCP封装 cn.hutool.db.ds.druid Druid封装 cn.hutool.db.ds.hikari Hikari封装 cn.hutool.db.ds.jndi JNDI封装 cn.hutool.db.ds.pooled Hutool对连接池的简单实现 cn.hutool.db.ds.simple JDBC中DriverManager简易封装 cn.hutool.db.ds.tomcat Tomcat-Pool封装 cn.hutool.db.handler JDBC结果集(ResultSet)转换封装,通过实现RsHandler接口,将ResultSet转换为我们想要的数据类型 cn.hutool.db.meta JDBC数据表元数据信息封装,包括表结构、列信息的封装,入口为MetaUtil cn.hutool.db.nosql NoSQL封装,包括Redis和MongoDB等数据库操作的封装 cn.hutool.db.nosql.mongo MongoDB数据库操作的封装 cn.hutool.db.nosql.redis Redis(Jedis)数据库操作的封装 cn.hutool.db.sql SQL语句和Statement构建封装 cn.hutool.db.transaction 事务相关类和操作 cn.hutool.dfa DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。 解释起来原理其实也不难,就是用所有关键字构造一棵树,然后用正文遍历这棵树,遍历到叶子节点即表示文章中存在这个关键字。 我们暂且忽略构建关键词树的时间,每次查找正文只需要O(n)复杂度就可以搞定。 cn.hutool.extra 由于Hutool的原则是不依赖于其它配置文件,但是很多时候我们需要针对第三方非常棒的库做一些工具类化的支持,因此Hutoo-extra包主要用于支持第三方库的工具类支持。 cn.hutool.extra.cglib Cglib库方法封装 cn.hutool.extra.compress 基于commons-compress的压缩解压封装 支持包括:gzip, bzip2, xz, lzma, Pack200, DEFLATE, Brotli, DEFLATE64, ZStandard and Z, the archiver formats are 7z, ar, arj, cpio, dump, tar and zip等格式。 cn.hutool.extra.compress.archiver 基于commons-compress的打包(压缩)封装 cn.hutool.extra.compress.extractor 基于commons-compress的解包(解压缩)封装 cn.hutool.extra.emoji 基于https://github.com/vdurmont/emoji-java的Emoji表情工具类 cn.hutool.extra.expression 表达式语言引擎封装 cn.hutool.extra.expression.engine 表达式语言引擎封装 cn.hutool.extra.expression.engine.aviator Aviator引擎封装,见:https://github.com/killme2008/aviatorscript cn.hutool.extra.expression.engine.jexl Jexl3引擎封装,见:https://github.com/apache/commons-jexl cn.hutool.extra.expression.engine.jfireel JfireEL引擎封装 见:https://gitee.com/eric_ds/jfireEL cn.hutool.extra.expression.engine.mvel MVEL (MVFLEX Expression Language)引擎封装 见:https://github.com/mvel/mvel cn.hutool.extra.expression.engine.rhino rhino引擎封装 见:https://github.com/mozilla/rhino cn.hutool.extra.expression.engine.spel Spring-Expression引擎封装 见:https://github.com/spring-projects/spring-framework/tree/master/spring-expression cn.hutool.extra.ftp 基于Apache Commons Net封装的FTP工具 cn.hutool.extra.mail 邮件封装,基于javax-mail库,入口为MailUtil cn.hutool.extra.pinyin 拼音工具封装,入口为PinyinUtil cn.hutool.extra.pinyin.engine 拼音具体实现 cn.hutool.extra.pinyin.engine.bopomofo4j 封装了Bopomofo4j的引擎。 cn.hutool.extra.pinyin.engine.houbbpinyin 封装了 Pinyin 的引擎。 cn.hutool.extra.pinyin.engine.jpinyin 封装了Jpinyin的引擎。 cn.hutool.extra.pinyin.engine.pinyin4j 封装了Pinyin4j的引擎。 cn.hutool.extra.pinyin.engine.tinypinyin 封装了TinyPinyin的引擎。 cn.hutool.extra.qrcode 二维码封装,基于zxing库,入口为QrCodeUtil cn.hutool.extra.servlet Servlet封装,包括Servlet参数获取、文件上传、Response写出等,入口为ServletUtil cn.hutool.extra.spring Spring相关工具封装 cn.hutool.extra.ssh Jsch封装,包括端口映射、SFTP封装等,入口为JschUtil cn.hutool.extra.template 第三方模板引擎封装,提供统一的接口用于适配第三方模板引擎 cn.hutool.extra.template.engine 第三方模板引擎实现 cn.hutool.extra.template.engine.beetl Beetl实现,模板引擎介绍见:http://ibeetl.com/ cn.hutool.extra.template.engine.enjoy Jfinal家的Enjoy模板引擎实现,见:https://jfinal.com/doc/6-1 cn.hutool.extra.template.engine.freemarker Freemarker实现 见:https://freemarker.apache.org/ cn.hutool.extra.template.engine.jetbrick jetbrick-template实现,模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x cn.hutool.extra.template.engine.jetbrick.loader jetbrick-template实现,特殊资源加载器 模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x cn.hutool.extra.template.engine.rythm Rythm实现,见:http://www.rythmengine.org/ cn.hutool.extra.template.engine.thymeleaf Thymeleaf实现,见:https://www.thymeleaf.org/ cn.hutool.extra.template.engine.velocity Velocity实现 见:http://velocity.apache.org/ cn.hutool.extra.template.engine.wit Wit实现,见:http://zqq90.github.io/webit-script/ cn.hutool.extra.tokenizer 中文分词封装 通过定义统一接口,适配第三方分词引擎 cn.hutool.extra.tokenizer.engine 第三方分词引擎实现 cn.hutool.extra.tokenizer.engine.analysis Lucene-analysis分词抽象封装 项目地址:https://github.com/apache/lucene-solr/tree/master/lucene/analysis cn.hutool.extra.tokenizer.engine.ansj Ansj分词实现 项目地址:https://github.com/NLPchina/ansj_seg cn.hutool.extra.tokenizer.engine.hanlp HanLP分词引擎实现 项目地址:https://github.com/hankcs/HanLP cn.hutool.extra.tokenizer.engine.ikanalyzer IKAnalyzer分词引擎实现 项目地址:https://github.com/yozhao/IKAnalyzer cn.hutool.extra.tokenizer.engine.jcseg Jcseg分词引擎实现 项目地址:https://gitee.com/lionsoul/jcseg cn.hutool.extra.tokenizer.engine.jieba Jieba分词引擎实现 项目地址:https://github.com/huaban/jieba-analysis cn.hutool.extra.tokenizer.engine.mmseg mmseg4j分词引擎实现 项目地址:https://github.com/chenlb/mmseg4j-core cn.hutool.extra.tokenizer.engine.mynlp MYNLP 中文NLP工具包分词实现 项目地址:https://github.com/mayabot/mynlp/ cn.hutool.extra.tokenizer.engine.word Word分词引擎实现 项目地址:https://github.com/ysc/word cn.hutool.extra.validation 基于JSR-380标准的校验工具类,封装了javax.validation的API cn.hutool.http Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。 cn.hutool.http.body 请求体封装实现 cn.hutool.http.cookie 自定义Cookie cn.hutool.http.server Http服务器封装 cn.hutool.http.server.action HttpServer 封装 cn.hutool.http.server.filter Filter 实现包装 cn.hutool.http.server.handler HttpHandler 实现包装 cn.hutool.http.ssl SSL封装 cn.hutool.http.useragent User-Agent解析 cn.hutool.http.webservice Webservice客户端封装实现 cn.hutool.json JSON封装,基于json.org官方库改造 cn.hutool.json.serialize JSON自定义序列化和反序列化接口和默认实现 cn.hutool.json.xml JSON与XML相互转换封装,基于json.org官方库改造 cn.hutool.jwt JSON Web Token (JWT)封装 cn.hutool.jwt.signers JWT签名封装 cn.hutool.log Hutool-log只是一个日志的通用门面,功能类似于Slf4j。 根据加入ClassPath中的jar包动态检测日志实现的方式,使日志使用更加便利灵活。 cn.hutool.log.dialect 第三方日志库的实现封装 cn.hutool.log.dialect.commons Apache-Commons-Logging日志库的实现封装 cn.hutool.log.dialect.console 控制台输出的实现封装 cn.hutool.log.dialect.jboss jboss-logging实现 cn.hutool.log.dialect.jdk JDK-Logging的实现封装 cn.hutool.log.dialect.log4j Log4j的实现封装 cn.hutool.log.dialect.log4j2 Log4j2的实现封装 cn.hutool.log.dialect.logtube LogTube的实现封装 cn.hutool.log.dialect.slf4j Slf4j的实现封装 cn.hutool.log.dialect.tinylog tinylog的实现封装 封装包括TinyLog和TinyLog2 cn.hutool.log.level 按照日志级别定义的日志打印接口定义 cn.hutool.poi POI封装实现 Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。 这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。 cn.hutool.poi.excel POI中对Excel读写的封装,入口为ExcelUtil cn.hutool.poi.excel.cell Excel中单元格相关类,入口为CellUtil cn.hutool.poi.excel.cell.setters Excel中单元格设置相关类,一些CellSetter的实现类 cn.hutool.poi.excel.cell.values cn.hutool.poi.excel.editors 单元格值编辑器,内部使用 cn.hutool.poi.excel.reader 数据读取接口及实现,此包中定义了SheetReader,通过实现此接口,实现sheet中的数据读取为不同类型。 cn.hutool.poi.excel.sax Sax方式操作Excel方式的封装 cn.hutool.poi.excel.sax.handler Sax读取中行处理器的定义和实现 cn.hutool.poi.excel.style Excel样式封装,入口为:StyleUtil cn.hutool.poi.exceptions POI相关异常 cn.hutool.poi.ofd 开放版式文档(Open Fixed-layout Document )封装,基于ofdrw(https://gitee.com/Trisia/ofdrw) cn.hutool.poi.word POI中对Word操作封装 cn.hutool.script Script模块主要针对Java的javax.script封装,可以运行Javascript脚本。 cn.hutool.setting Setting模块主要针对Properties文件读写做封装,同时定义一套自己的配置文件规范,实现兼容性良好的配置工具。 cn.hutool.setting.dialect 配置文件实现封装,例如Properties封装Props cn.hutool.setting.profile 配置环境封装,例如Profile可以自定义不同环境下的配置文件位置 cn.hutool.setting.yaml YAML文件的读写封装,基于snakeyaml cn.hutool.socket Socket套接字相关工具类封装 cn.hutool.socket.aio AIO相关封装 cn.hutool.socket.nio NIO相关封装 cn.hutool.socket.protocol 消息协议接口及实现 cn.hutool.system System模块主要获取系统、JVM、内存、CPU等信息,以便动态监测系统状态 cn.hutool.system.oshi Oshi库封装 https://github.com/oshi/oshi 五、代码使用
字符串相关
/** * 字符串相关 */ @Test public void test1() { int a = 1; String a1 = Convert.toStr(a); System.out.println(a1); long[] b = {1,2,3,4,5}; String b1 = Convert.toStr(b); System.out.println(b1); String str = "君不见黄河之水天上来,奔流到海不复回"; //字符串格式化的使用 System.out.println(StrUtil.format("字符串内容:{}", str)); //判断字符串是否为空 System.out.println("字符串是否为空:" + StrUtil.isEmpty(str)); //原有用法 System.out.println("字符串是否为空2:" + StringUtils.isEmpty(str)); System.out.println("字符串是否为空3:" + StringUtils.isBlank(str)); }
BigDecimal加减乘除运算
/** * BigDecimal的加减乘除运算 * * @author libusi */ @Test public void test2() { BigDecimal b1 = new BigDecimal("8.256"); BigDecimal b2 = new BigDecimal("6.347"); //加法 BigDecimal addResult = NumberUtil.add(b1, b2); System.out.println("加法运算结果:" + addResult); //减法 BigDecimal subResult = NumberUtil.sub(b1, b2); System.out.println("减法运算结果:" + subResult); //乘法 BigDecimal mulResult = NumberUtil.mul(b1, b2); System.out.println("乘法运算结果:" + mulResult); //除法 BigDecimal divResult = NumberUtil.div(b1, b2); System.out.println("除法运算结果:" + divResult); //保留两位小数 BigDecimal roundResult = NumberUtil.round(b1, 2); System.out.println("保留两位小数:" + roundResult); }
时间工具类(hutool-core)
日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装
public static void main(String[] args) { Date date = new Date(); String beginDate = DateUtil.year(date) + "-01-01 00:00:01"; String endDate = DateUtil.year(date) + "-12-31 23:59:59"; System.out.println("beginDate:" + beginDate); System.out.println("endDate:" + endDate); //本月始末 String date1 = DateUtil.beginOfMonth(date).toString(NORM_DATETIME_PATTERN); String date2 = DateUtil.endOfMonth(date).toString(NORM_DATETIME_PATTERN); System.out.println("date1:" + date1); System.out.println("date2:" + date2); String dataStr = DateUtil.formatDateTime(new Date()) .replaceAll(" ", "") .replaceAll("-", "") .replaceAll(":", ""); //获取文件名 StringBuilder fileName = new StringBuilder(dataStr).append("_").append(IdUtil.simpleUUID()); System.out.println(fileName); }
IO流相关
io包的封装主要针对流、文件的读写封装,主要以工具类为主,提供常用功能的封装
常用工具类此包中的工具类为未经过分类的一些工具类,提供一些常用的工具方法。
此包中根据用途归类为XXXUtil,提供大量的工具方法。在工具类中,主要以类方法(static方法)为主,且各个类无法实例化为对象,一个方法是一个独立功能,无相互影响。
语言特性语言特性,即lang包,主要针对JDK中的一些数据结构和接口的完善
JavaBean针对JavaBean已经有BeanUtil的工具封装,且进行了扩展。
集合类集合包中封装了包括Enumeration、Iterator等的包装
Map最早Map的相关工具是被包含在CollUtil中的,但是考虑到Map和集合非同一类数据结构,因此独立出来,且Hutool封装了许多自定义的Map类,因此单独成包。
Codec编码code的编码解码,包含Base62,Base64和Base32等的编码解码。
文本操作包含对CSV文件处理工具,可复用字符串生成器,Unicode编码转换工具和字符串切割等工具
注解封装了注解获取等方法的工具类
比较器各种比较器(Comparator)实现和封装
异常针对异常封装,例如包装为RuntimeException
数学此工具是NumberUtil的一个补充,NumberUtil偏向于简单数学计算的封装,MathUtil偏向复杂数学计算
图片图片工具和图片编辑器
网络网络工具和URL生成器
配置文件(Hutool-setting)Setting除了兼容Properties文件格式外,还提供了一些特有功能,这些功能包括:
各种编码方式支持
变量支持
分组支持
日志(Hutool-log)准确的说,Hutool-log只是一个日志的通用门面,功能类似于Slf4j
缓存(Hutool-cache)Hutool-cache模块最早受到jodd-cache的启发(如今大部分逻辑依旧与jodd保持一致),此模块提供一种缓存的简单实现方案,在小型项目中对于简单的缓存需求非常好用。
JSON(Hutool-json)不可否认,现在优秀的JSON框架非常多,我经常使用的像阿里的FastJSON,Jackson等都是非常优秀的包,性能突出,简单易用。Hutool开始也并不想自己写一个JSON,但是在各种工具的封装中,发现JSON已经不可或缺,因此将json.org官方的JSON解析纳入其中,进行改造。在改造过程中,积极吸取其它类库优点,优化成员方法,抽象接口和类,最终形成Hutool-json。
加密解密(Hutool-crypto)加密分为三种:
对称加密(symmetric),例如:AES、DES等
非对称加密(asymmetric),例如:RSA、DSA等
摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等
hutool-crypto针对这三种加密类型分别封装,并提供常用的大部分加密算法。package com.god.demo.utils; import cn.hutool.core.codec.Base64; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.digest.DigestAlgorithm; import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.Digester; import cn.hutool.crypto.symmetric.AES; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; import org.junit.jupiter.api.Test; public class SmTest { /** * md5加密 */ @Test public void test2() { String content = "君不见黄SecureUtil河之水天上来,奔流到海不复回"; String encrypt = SecureUtil.md5(content); System.out.println("加密前的内容:" + content); System.out.println("加密后的内容:" + encrypt); } //摘要加密算法 @Test public void fun1() { //获取摘要 //MD5 String content = "君不见黄SecureUtil河之水天上来,奔流到海不复回"; String encrypt = SecureUtil.md5(content); System.out.println("加密前的内容:" + content); System.out.println("加密后的内容:" + encrypt); //方式一 Digester md5 = new Digester(DigestAlgorithm.MD5); String str = md5.digestHex(content); System.out.println(str); //方式二 String string = DigestUtil.md5Hex(content); System.out.println(string); } //非对称加密 @Test public void fun2() { //非对称加密 RSA rsa = new RSA(); //获得私钥 rsa.getPrivateKey(); rsa.getPrivateKeyBase64(); //获得公钥 rsa.getPublicKey(); rsa.getPublicKeyBase64(); //公钥加密,私钥加密 byte[] encrypt = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey); byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); String encode = Base64.encode(decrypt); System.out.println(encode); //私钥加密,公钥解密 byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey); byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); String encode2 = Base64.encode(decrypt2); System.out.println(encode2); } @Test public void fun4() { String content = "asdf1234"; byte[] key = "hahaaha".getBytes(); //构建 SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); //加密 byte[] encrypt = aes.encrypt(content); //解密 byte[] decrypt = aes.decrypt(encrypt); } //对称加密 @Test public void fun3() { //第一种:以AES算法 String content = "test中文"; //随机生成密钥 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); //构建 SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); //加密 byte[] encrypt = aes.encrypt(content); //解密 byte[] decrypt = aes.decrypt(encrypt); //加密16进制表示 String encryptHex = aes.encryptHex(content); System.out.println("AES加密16进制表示:" + encryptHex); //解密为字符串 String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8); System.out.println("AES解密为字符串:" + decryptStr); //第二种 DESede加密 String content2 = "test中文"; byte[] key2 = SecureUtil.generateKey(SymmetricAlgorithm.DESede.getValue()).getEncoded(); SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DESede, key2); //加密 byte[] encrypt2 = des.encrypt(content2); //解密 byte[] decrypt2 = des.decrypt(encrypt2); //加密为16进制字符串(Hex表示) String encryptHex2 = des.encryptHex(content2); System.out.println("DESede加密16进制表示:" + encryptHex2); String decryptStr2 = des.decryptStr(encryptHex2); System.out.println("DESede解密为字符串:" + decryptStr2); //第三种AES封装 String content3 = "test中文"; //随机生成密钥 byte[] key3 = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); //构建 AES aes3 = SecureUtil.aes(key3); //加密 byte[] encrypt3 = aes3.encrypt(content3); //解密 byte[] decrypt3 = aes3.decrypt(encrypt3); //加密为16进制表示 String encryptHex3 = aes3.encryptHex(content3); System.out.println("AES封装加密16进制表示:" + encryptHex3); //解密为字符串 String decryptStr3 = aes3.decryptStr(encryptHex3, CharsetUtil.CHARSET_UTF_8); System.out.println("AES封装解密为字符串:" + decryptStr3); } }
DFA查找(Hutool-dfa)针对DFA算法以及网上的一些实现,Hutool做了整理和改进,最终形成现在的Hutool-dfa模块
数据库(Hutool-db)
Hutool-db是一个在JDBC基础上封装的数据库操作工具类,通过包装,使用ActiveRecord思想操作数据库。在Hutool-db中,使用Entity(本质上是个Map)代替Bean来使数据库操作更加灵活,同时提供Bean和Entity的转换提供传统ORM的兼容支持。
HTTP客户端(Hutool-http)Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单
定时任务(Hutool-cron)Hutool的定时任务模块与Linux的Crontab使用上非常类似,通过一个cron.setting配置文件,简单调用start()方法即可简单使用。
同时还提供了秒匹配和年匹配等Quartz才有的功能,定时任务表达式上也同时兼容Crontab(Cron4j)和Quartz的表达式。
扩展(Hutool-extra)由于Hutool的原则是不依赖于其它配置文件,但是很多时候我们需要针对第三方非常棒的库做一些工具类化的支持,因此Hutoo-extra包主要用于支持第三方库的工具类支持
布隆过滤(Hutool-bloomFilter)布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。
参考:https://www.cnblogs.com/z941030/p/9218356.html
切面(Hutool-aop)AOP模块主要针对JDK中动态代理进行封装,抽象动态代理为切面类Aspect,通过ProxyUtil代理工具类将切面对象与被代理对象融合,产生一个代理对象,从而可以针对每个方法执行前后做通用的功能。
脚本(Hutool-script)script模块主要针对Java的javax.script封装,可以运行Javascript脚本。
此模块非常简单。主要功能集中在SCriptUtil这个工具类中。
Office文档操作(Hutool-poi)Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库,Hutool默认不引入。
系统调用(Hutool-system)系统属性调用-SystemUtil和Oshi封装-OshiUtil
图形验证码(Hutool-captcha)验证码生成和校验功能
网络Socket(Hutool-socket)在开发网络应用程序的时候,我们又会遇到Socket这个概念。Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。
JDK中提供了Socket功能,包括:
BIO
NIO
AIO
Hutool只针对NIO和AIO做了简单的封装,用于简化Socket异步开发。
更多具体用法请参考官方文档
有用请点赞,养成良好习惯!
疑问交流鼓励请留言!
Hutool使用总结(VIP典藏版)
于 2022-06-08 09:47:33 首次发布
