Hutool使用总结(VIP典藏版)

缓存(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-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方式引入所有模块。

组件包详细描述

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算法的过滤器实现

必看视频!获取2024年最新Java开发全套学习资料 备注Java

style=“color:#000000;”>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工具IterUtilcn.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特殊异常封装,同时提供异常工具ExceptionUtilcn.hutool.core.gettergetXXX方法的接口和抽象实现cn.hutool.core.img图像处理相关工具类封装cn.hutool.core.img.gifGIF处理,来自:https://github.com/rtyley/animated-gif-lib-for-javacn.hutool.core.ioIO相关封装和工具类,包括Inputstream和OutputStream实现类,工具包括流工具IoUtil、文件工具FileUtil和Buffer工具BufferUtilcn.hutool.core.io.checksumIO校验相关库和工具cn.hutool.core.io.checksum.crc16CRC16相关算法封装为Checksumcn.hutool.core.io.copyIO流拷贝相关封装相关封装cn.hutool.core.io.file对文件读写的封装,包括文件拷贝、文件读取、文件写出、行处理等cn.hutool.core.io.file.visitorFileVisitor功能性实现,包括递归删除、拷贝等cn.hutool.core.io.resource针对ClassPath和文件中资源读取的封装,主要入口为工具类ResourceUtilcn.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.parsercn.hutool.core.mapMap相关封装,提供特殊Map实现以及Map工具MapUtilcn.hutool.core.map.multi多参数类型的Map实现,包括集合类型值的Map和Tablecn.hutool.core.math提供数学计算相关封装,包括排列组合等,入口为MathUtilcn.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工具UnicodeUtilcn.hutool.core.text.csv提供CSV文件读写的封装,入口为CsvUtil规范见:https://datatracker.ietf.org/doc/html/rfc4180cn.hutool.core.text.escape提供各种转义和反转义实现cn.hutool.core.text.finder文本查找实现,包括: 查找文本中的字符(正向、反向) 查找文本中的匹配字符(正向、反向) 查找文本中的字符串(正向、反向) 查找文本中匹配正则的字符串(正向)cn.hutool.core.text.replacer文本替换类抽象及实现cn.hutool.core.text.splitcn.hutool.core.thread提供线程及高并发封装,入口为ThreadUtilcn.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定时任务表达式解析,核心为CronPatterncn.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摘要加密算法实现,入口为DigestUtilcn.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.fpecn.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/BeeCPcn.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数据表元数据信息封装,包括表结构、列信息的封装,入口为MetaUtilcn.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/aviatorscriptcn.hutool.extra.expression.engine.jexlJexl3引擎封装,见:https://github.com/apache/commons-jexlcn.hutool.extra.expression.engine.jfireelJfireEL引擎封装见:https://gitee.com/eric_ds/jfireELcn.hutool.extra.expression.engine.mvelMVEL (MVFLEX Expression Language)引擎封装见:https://github.com/mvel/mvelcn.hutool.extra.expression.engine.rhinorhino引擎封装见:https://github.com/mozilla/rhinocn.hutool.extra.expression.engine.spelSpring-Expression引擎封装见:https://github.com/spring-projects/spring-framework/tree/master/spring-expressioncn.hutool.extra.ftp基于Apache Commons Net封装的FTP工具cn.hutool.extra.mail邮件封装,基于javax-mail库,入口为MailUtilcn.hutool.extra.pinyin拼音工具封装,入口为PinyinUtilcn.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库,入口为QrCodeUtilcn.hutool.extra.servletServlet封装,包括Servlet参数获取、文件上传、Response写出等,入口为ServletUtilcn.hutool.extra.springSpring相关工具封装cn.hutool.extra.sshJsch封装,包括端口映射、SFTP封装等,入口为JschUtilcn.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-1cn.hutool.extra.template.engine.freemarkerFreemarker实现见:https://freemarker.apache.org/cn.hutool.extra.template.engine.jetbrickjetbrick-template实现,模板引擎介绍见:https://github.com/subchen/jetbrick-template-2xcn.hutool.extra.template.engine.jetbrick.loaderjetbrick-template实现,特殊资源加载器模板引擎介绍见:https://github.com/subchen/jetbrick-template-2xcn.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/analysiscn.hutool.extra.tokenizer.engine.ansjAnsj分词实现项目地址:https://github.com/NLPchina/ansj_segcn.hutool.extra.tokenizer.engine.hanlpHanLP分词引擎实现项目地址:https://github.com/hankcs/HanLPcn.hutool.extra.tokenizer.engine.ikanalyzerIKAnalyzer分词引擎实现项目地址:https://github.com/yozhao/IKAnalyzercn.hutool.extra.tokenizer.engine.jcsegJcseg分词引擎实现项目地址:https://gitee.com/lionsoul/jcsegcn.hutool.extra.tokenizer.engine.jiebaJieba分词引擎实现项目地址:https://github.com/huaban/jieba-analysiscn.hutool.extra.tokenizer.engine.mmsegmmseg4j分词引擎实现项目地址:https://github.com/chenlb/mmseg4j-corecn.hutool.extra.tokenizer.engine.mynlpMYNLP 中文NLP工具包分词实现项目地址:https://github.com/mayabot/mynlp/cn.hutool.extra.tokenizer.engine.wordWord分词引擎实现项目地址:https://github.com/ysc/wordcn.hutool.extra.validation基于JSR-380标准的校验工具类,封装了javax.validation的APIcn.hutool.httpHutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。cn.hutool.http.body请求体封装实现cn.hutool.http.cookie自定义Cookiecn.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和TinyLog2cn.hutool.log.level按照日志级别定义的日志打印接口定义cn.hutool.poiPOI封装实现Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。cn.hutool.poi.excelPOI中对Excel读写的封装,入口为ExcelUtilcn.hutool.poi.excel.cellExcel中单元格相关类,入口为CellUtilcn.hutool.poi.excel.cell.settersExcel中单元格设置相关类,一些CellSetter的实现类cn.hutool.poi.excel.cell.valuescn.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样式封装,入口为:StyleUtilcn.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封装Propscn.hutool.setting.profile配置环境封装,例如Profile可以自定义不同环境下的配置文件位置cn.hutool.setting.yamlYAML文件的读写封装,基于snakeyamlcn.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);

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
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);

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

[外链图片转存中…(img-cmfB6fup-1716443300284)]

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值