IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Hutool使用总结(VIP典藏版) -> 正文阅读

[Java知识库]Hutool使用总结(VIP典藏版)

目录

一、简介

二、设计哲学与优势

设计哲学

优势

三、安装

🍊Maven引用全量

🍊Maven按需引用

🍐Gradle引用

四、组件

组件包描述

组件包详细描述

五、代码使用

字符串相关

BigDecimal加减乘除运算

时间工具类(hutool-core)

IO流相关

常用工具类

语言特性

JavaBean

集合类

Map

Codec编码

文本操作

注解

比较器

异常

数学

图片

网络

配置文件(Hutool-setting)

日志(Hutool-log)

缓存(Hutool-cache)

JSON(Hutool-json)

加密解密(Hutool-crypto)

DFA查找(Hutool-dfa)

数据库(Hutool-db)

HTTP客户端(Hutool-http)

定时任务(Hutool-cron)

扩展(Hutool-extra)

切面(Hutool-aop)

脚本(Hutool-script)

Office文档操作(Hutool-poi)

系统调用(Hutool-system)

图形验证码(Hutool-captcha)

网络Socket(Hutool-socket)


一、简介

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-aopJDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache简单缓存实现
hutool-core核心,包括Bean操作、日期、各种Util等
hutool-cron定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC封装后的数据操作,基于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-jsonJSON实现
hutool-captcha图片验证码实现
hutool-poi针对POI中Excel和Word的封装
hutool-socket基于Java的NIO和AIO的Socket封装
hutool-jwtJSON Web Token (JWT)封装实现

可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。

组件包详细描述

PackageDescription
cn.hutoolHutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
cn.hutool.aopJDK动态代理封装,提供非IOC下的切面支持
cn.hutool.aop.aspects切面实现,提供一些基本的切面实现
cn.hutool.aop.interceptor代理拦截器实现
cn.hutool.aop.proxy代理实现
cn.hutool.bloomfilter布隆过滤,提供一些Hash算法的布隆过滤
cn.hutool.bloomfilter.bitMapBitMap实现
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.coreHutool核心方法及数据结构包
cn.hutool.core.annotation注解包,提供增强型注解和注解工具类
cn.hutool.core.beanBean相关操作,包括Bean信息描述,Bean路径表达式、动态Bean、Bean工具等
cn.hutool.core.bean.copierBean拷贝实现,包括拷贝选项等
cn.hutool.core.bean.copier.providerBean值提供者方式封装
cn.hutool.core.builder建造者工具
用于建造特定对象或结果
cn.hutool.core.clone克隆封装
cn.hutool.core.codecBaseN以及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.gettergetXXX方法的接口和抽象实现
cn.hutool.core.img图像处理相关工具类封装
cn.hutool.core.img.gifGIF处理,来自:https://github.com/rtyley/animated-gif-lib-for-java
cn.hutool.core.ioIO相关封装和工具类,包括Inputstream和OutputStream实现类,工具包括流工具IoUtil、文件工具FileUtil和Buffer工具BufferUtil
cn.hutool.core.io.checksumIO校验相关库和工具
cn.hutool.core.io.checksum.crc16CRC16相关算法封装为Checksum
cn.hutool.core.io.copyIO流拷贝相关封装相关封装
cn.hutool.core.io.file对文件读写的封装,包括文件拷贝、文件读取、文件写出、行处理等
cn.hutool.core.io.file.visitorFileVisitor功能性实现,包括递归删除、拷贝等
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.mapMap相关封装,提供特殊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.urlURL相关工具
cn.hutool.core.streamJava8的stream相关封装
cn.hutool.core.swingSwing和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.threadlocalThreadLocal相关封装
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.macHMAC,全称为“Hash Message Authentication Code”,中文名“散列消息鉴别码”
主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
一般的,消息鉴别码用于验证传输于两个共 同享有一个密钥的单位之间的消息。
HMAC 可以与任何迭代散列函数捆绑使用。MD5 和 SHA-1 就是这种散列函数。HMAC 还可以使用一个用于计算和确认消息鉴别值的密钥。
cn.hutool.crypto.digest.otpOTP 是 One-Time Password的简写,表示一次性密码。
cn.hutool.crypto.symmetric对称加密算法实现,包括AES、DES、DESede等
cn.hutool.crypto.symmetric.fpe
cn.hutool.dbHutool-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.beeBeeCP封装 见:https://github.com/Chris2018998/BeeCP
cn.hutool.db.ds.c3p0C3P0封装
cn.hutool.db.ds.dbcpDBCP封装
cn.hutool.db.ds.druidDruid封装
cn.hutool.db.ds.hikariHikari封装
cn.hutool.db.ds.jndiJNDI封装
cn.hutool.db.ds.pooledHutool对连接池的简单实现
cn.hutool.db.ds.simpleJDBC中DriverManager简易封装
cn.hutool.db.ds.tomcatTomcat-Pool封装
cn.hutool.db.handlerJDBC结果集(ResultSet)转换封装,通过实现RsHandler接口,将ResultSet转换为我们想要的数据类型
cn.hutool.db.metaJDBC数据表元数据信息封装,包括表结构、列信息的封装,入口为MetaUtil
cn.hutool.db.nosqlNoSQL封装,包括Redis和MongoDB等数据库操作的封装
cn.hutool.db.nosql.mongoMongoDB数据库操作的封装
cn.hutool.db.nosql.redisRedis(Jedis)数据库操作的封装
cn.hutool.db.sqlSQL语句和Statement构建封装
cn.hutool.db.transaction事务相关类和操作
cn.hutool.dfaDFA全称为:Deterministic Finite Automaton,即确定有穷自动机。
解释起来原理其实也不难,就是用所有关键字构造一棵树,然后用正文遍历这棵树,遍历到叶子节点即表示文章中存在这个关键字。
我们暂且忽略构建关键词树的时间,每次查找正文只需要O(n)复杂度就可以搞定。
cn.hutool.extra由于Hutool的原则是不依赖于其它配置文件,但是很多时候我们需要针对第三方非常棒的库做一些工具类化的支持,因此Hutoo-extra包主要用于支持第三方库的工具类支持。
cn.hutool.extra.cglibCglib库方法封装
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.aviatorAviator引擎封装,见:https://github.com/killme2008/aviatorscript
cn.hutool.extra.expression.engine.jexlJexl3引擎封装,见:https://github.com/apache/commons-jexl
cn.hutool.extra.expression.engine.jfireelJfireEL引擎封装
见:https://gitee.com/eric_ds/jfireEL
cn.hutool.extra.expression.engine.mvelMVEL (MVFLEX Expression Language)引擎封装
见:https://github.com/mvel/mvel
cn.hutool.extra.expression.engine.rhinorhino引擎封装
见:https://github.com/mozilla/rhino
cn.hutool.extra.expression.engine.spelSpring-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.servletServlet封装,包括Servlet参数获取、文件上传、Response写出等,入口为ServletUtil
cn.hutool.extra.springSpring相关工具封装
cn.hutool.extra.sshJsch封装,包括端口映射、SFTP封装等,入口为JschUtil
cn.hutool.extra.template第三方模板引擎封装,提供统一的接口用于适配第三方模板引擎
cn.hutool.extra.template.engine第三方模板引擎实现
cn.hutool.extra.template.engine.beetlBeetl实现,模板引擎介绍见:http://ibeetl.com/
cn.hutool.extra.template.engine.enjoyJfinal家的Enjoy模板引擎实现,见:https://jfinal.com/doc/6-1
cn.hutool.extra.template.engine.freemarkerFreemarker实现
见:https://freemarker.apache.org/
cn.hutool.extra.template.engine.jetbrickjetbrick-template实现,模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x
cn.hutool.extra.template.engine.jetbrick.loaderjetbrick-template实现,特殊资源加载器
模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x
cn.hutool.extra.template.engine.rythmRythm实现,见:http://www.rythmengine.org/
cn.hutool.extra.template.engine.thymeleafThymeleaf实现,见:https://www.thymeleaf.org/
cn.hutool.extra.template.engine.velocityVelocity实现
见:http://velocity.apache.org/
cn.hutool.extra.template.engine.witWit实现,见:http://zqq90.github.io/webit-script/
cn.hutool.extra.tokenizer中文分词封装
通过定义统一接口,适配第三方分词引擎
cn.hutool.extra.tokenizer.engine第三方分词引擎实现
cn.hutool.extra.tokenizer.engine.analysisLucene-analysis分词抽象封装
项目地址:https://github.com/apache/lucene-solr/tree/master/lucene/analysis
cn.hutool.extra.tokenizer.engine.ansjAnsj分词实现
项目地址:https://github.com/NLPchina/ansj_seg
cn.hutool.extra.tokenizer.engine.hanlpHanLP分词引擎实现
项目地址:https://github.com/hankcs/HanLP
cn.hutool.extra.tokenizer.engine.ikanalyzerIKAnalyzer分词引擎实现
项目地址:https://github.com/yozhao/IKAnalyzer
cn.hutool.extra.tokenizer.engine.jcsegJcseg分词引擎实现
项目地址:https://gitee.com/lionsoul/jcseg
cn.hutool.extra.tokenizer.engine.jiebaJieba分词引擎实现
项目地址:https://github.com/huaban/jieba-analysis
cn.hutool.extra.tokenizer.engine.mmsegmmseg4j分词引擎实现
项目地址:https://github.com/chenlb/mmseg4j-core
cn.hutool.extra.tokenizer.engine.mynlpMYNLP 中文NLP工具包分词实现
项目地址:https://github.com/mayabot/mynlp/
cn.hutool.extra.tokenizer.engine.wordWord分词引擎实现
项目地址:https://github.com/ysc/word
cn.hutool.extra.validation基于JSR-380标准的校验工具类,封装了javax.validation的API
cn.hutool.httpHutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。
cn.hutool.http.body请求体封装实现
cn.hutool.http.cookie自定义Cookie
cn.hutool.http.serverHttp服务器封装
cn.hutool.http.server.actionHttpServer 封装
cn.hutool.http.server.filterFilter 实现包装
cn.hutool.http.server.handlerHttpHandler 实现包装
cn.hutool.http.sslSSL封装
cn.hutool.http.useragentUser-Agent解析
cn.hutool.http.webserviceWebservice客户端封装实现
cn.hutool.jsonJSON封装,基于json.org官方库改造
cn.hutool.json.serializeJSON自定义序列化和反序列化接口和默认实现
cn.hutool.json.xmlJSON与XML相互转换封装,基于json.org官方库改造
cn.hutool.jwtJSON Web Token (JWT)封装
cn.hutool.jwt.signersJWT签名封装
cn.hutool.logHutool-log只是一个日志的通用门面,功能类似于Slf4j。
根据加入ClassPath中的jar包动态检测日志实现的方式,使日志使用更加便利灵活。
cn.hutool.log.dialect第三方日志库的实现封装
cn.hutool.log.dialect.commonsApache-Commons-Logging日志库的实现封装
cn.hutool.log.dialect.console控制台输出的实现封装
cn.hutool.log.dialect.jbossjboss-logging实现
cn.hutool.log.dialect.jdkJDK-Logging的实现封装
cn.hutool.log.dialect.log4jLog4j的实现封装
cn.hutool.log.dialect.log4j2Log4j2的实现封装
cn.hutool.log.dialect.logtubeLogTube的实现封装
cn.hutool.log.dialect.slf4jSlf4j的实现封装
cn.hutool.log.dialect.tinylogtinylog的实现封装
封装包括TinyLog和TinyLog2
cn.hutool.log.level按照日志级别定义的日志打印接口定义
cn.hutool.poiPOI封装实现
Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。
这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。
cn.hutool.poi.excelPOI中对Excel读写的封装,入口为ExcelUtil
cn.hutool.poi.excel.cellExcel中单元格相关类,入口为CellUtil
cn.hutool.poi.excel.cell.settersExcel中单元格设置相关类,一些CellSetter的实现类
cn.hutool.poi.excel.cell.values
cn.hutool.poi.excel.editors单元格值编辑器,内部使用
cn.hutool.poi.excel.reader数据读取接口及实现,此包中定义了SheetReader,通过实现此接口,实现sheet中的数据读取为不同类型。
cn.hutool.poi.excel.saxSax方式操作Excel方式的封装
cn.hutool.poi.excel.sax.handlerSax读取中行处理器的定义和实现
cn.hutool.poi.excel.styleExcel样式封装,入口为:StyleUtil
cn.hutool.poi.exceptionsPOI相关异常
cn.hutool.poi.ofd开放版式文档(Open Fixed-layout Document )封装,基于ofdrw(https://gitee.com/Trisia/ofdrw)
cn.hutool.poi.wordPOI中对Word操作封装
cn.hutool.scriptScript模块主要针对Java的javax.script封装,可以运行Javascript脚本。
cn.hutool.settingSetting模块主要针对Properties文件读写做封装,同时定义一套自己的配置文件规范,实现兼容性良好的配置工具。
cn.hutool.setting.dialect配置文件实现封装,例如Properties封装Props
cn.hutool.setting.profile配置环境封装,例如Profile可以自定义不同环境下的配置文件位置
cn.hutool.setting.yamlYAML文件的读写封装,基于snakeyaml
cn.hutool.socketSocket套接字相关工具类封装
cn.hutool.socket.aioAIO相关封装
cn.hutool.socket.nioNIO相关封装
cn.hutool.socket.protocol消息协议接口及实现
cn.hutool.systemSystem模块主要获取系统、JVM、内存、CPU等信息,以便动态监测系统状态
cn.hutool.system.oshiOshi库封装
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对象的封装


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异步开发。
?

更多具体用法请参考官方文档

有用请点赞,养成良好习惯!

疑问交流鼓励请留言!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-16 21:31:54  更:2022-06-16 21:35:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:40:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码