Hutool - 小而全的 Java 开发工具库推荐

本贴最后更新于 1456 天前,其中的信息可能已经渤澥桑田

Hutool 简介

Hutool 是一款小而全的开源开发工具类库,在 github 上拥有将近一万九的 star,基本上你能想到的开发当中常需要用到的小轮子,基本上都有具备。学习一下 hutool 工具包可以避免我们在平常开发中重复造轮子。这款 hutool 开源库,更新频率快,jar 包小仅 1.5Mb。对比其他同款类型的基础工具类库来说,是一大优势。因为其他同款类型的基础工具类库多多少少都有基于 apache commons 做了一些封装。

对于很多小型公司来说,公司内部并没有完善的基础工具类库,使用 hutool 可以节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务同时可以最大限度的避免封装不完善带来的 bug。

hutool github 地址

Hutool 主要组件

模块 介绍
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 的封装
hutool-socket 基于 Java 的 NIO 和 AIO 的 Socket 封装

hutool 库的工具类非常全,一篇文章难以概括。以下就列举开发中常用到的工具类。

常用工具类介绍

工具类内包含的方法都比较齐全,我们就不一一列举,仅列举比较有代表性的方法。

DateUtil

字符串转日期

DateUtil.parse 方法会自动识别一些常用格式,包括:

yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

我们也可以使用自定义日期格式转化:

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

计时器(常用于计算代码执行时间)

TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------

timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数

IoUtil

拷贝:流的读写可以总结为从输入流读取,从输出流写出,这个过程我们定义为拷贝。这个是一个基本过程,也是文件、流操作的基础。

以文件流拷贝为例:

BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);

FileUtil

FileUtil 内包含以下方法:

  • 文件操作:包括文件目录的新建、删除、复制、移动、改名等
  • 文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等。
  • 绝对路径:针对 ClassPath 中的文件转换为绝对路径文件。
  • 文件名:主文件名,扩展名的获取
  • 读操作:包括类似 IoUtil 中的 getReader、readXXX 操作
  • 写操作:包括 getWriter 和 writeXXX 操作

EnumUtil

首先我们定义一个枚举对象:

//定义枚举
public enum TestEnum{
    TEST1("type1"), TEST2("type2"), TEST3("type3");

    private TestEnum(String type) {
        this.type = type;
    }

    private String type;

    public String getType() {
        return this.type;
    }
}

getNames

获取枚举类中所有枚举对象的 name 列表。栗子:

//定义枚举
public enum TestEnum {
    TEST1, TEST2, TEST3;
}

List<String> names = EnumUtil.getNames(TestEnum.class);
//结果:[TEST1, TEST2, TEST3]

ImgUtil

scale 缩放图片

提供两种重载方法:其中一个是按照长宽缩放,另一种是按照比例缩放。

ImgUtil.scale(
    FileUtil.file("d:/face.jpg"), 
    FileUtil.file("d:/face_result.jpg"), 
    0.5f//缩放比例
);

cut 剪裁图片

ImgUtil.cut(
    FileUtil.file("d:/face.jpg"), 
    FileUtil.file("d:/face_result.jpg"), 
    new Rectangle(200, 200, 100, 100)//裁剪的矩形区域
);

NetUtil

网络工具类主要包含以下方法

  1. longToIpv4 根据 long 值获取 ip v4 地址
  2. ipv4ToLong 根据 ip 地址计算出 long 型的数据
  3. isUsableLocalPort 检测本地端口可用性
  4. isValidPort 是否为有效的端口
  5. isInnerIP 判定是否为内网 IP
  6. localIpv4s 获得本机的 IP 地址列表
  7. toAbsoluteUrl 相对 URL 转换为绝对 URL
  8. hideIpPart 隐藏掉 IP 地址的最后一部分为 * 代替
  9. buildInetSocketAddress 构建 InetSocketAddress
  10. getIpByHost 通过域名得到 IP
  11. isInner 指定 IP 的 long 是否在指定范围内

SecureUtil

加密工具类主要针对常用加密算法构建快捷方式,还有提供一些密钥生成的快捷工具方法。

对称加密

SecureUtil.aes
SecureUtil.des

摘要算法

SecureUtil.md5
SecureUtil.sha1
SecureUtil.hmac
SecureUtil.hmacMd5
SecureUtil.hmacSha1

非对称加密

SecureUtil.rsa
SecureUtil.dsa

HtmlUtil

比如我们在使用爬虫爬取 HTML 页面后,需要对返回页面的 HTML 内容做一定处理,比如去掉指定标签(例如广告栏等)、去除 JS、去掉样式等等,这些操作都可以使用 HtmlUtil 完成。

HtmlUtil.removeHtmlTag 清除指定 HTML 标签和被标签包围的内容

String str = "pre<img src=\"xxx/dfdsfds/test.jpg\">";
// 结果为:pre
String result = HtmlUtil.removeHtmlTag(str, "img");

HtmlUtil.filter 过滤 HTML 文本,防止 XSS 攻击

String html = "<alert></alert>";
// 结果为:""
String filter = HtmlUtil.filter(html);

HtmlUtil.removeAllHtmlAttr 去除指定标签的所有属性

String html = "<div class=\"test_div\" width=\"120\"></div>";
// 结果为:<div></div>
String result = HtmlUtil.removeAllHtmlAttr(html, "div");

QrCodeUtil

二维码工具类仅需一行代码

// 生成指定url对应的二维码到文件,宽和高都是300像素
QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("d:/qrcode.jpg"));

TokenizerUtil

中文分词工具类

解析文本并分词

//自动根据用户引入的分词库的jar来自动选择使用的引擎
TokenizerEngine engine = TokenizerUtil.createEngine();

//解析文本
String text = "这两个方法的区别在于返回值";
Result result = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String resultStr = CollUtil.join((Iterator<Word>)result, " ");

ExcelUtil

Excel 操作工具封装
使用

从文件中读取 Excel 为 ExcelReader

ExcelReader reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"));

从流中读取 Excel 为 ExcelReader(比如从 ClassPath 中读取 Excel 文件)

ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("aaa.xlsx"));

读取指定的 sheet

ExcelReader reader;

//通过sheet编号获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), 0);
//通过sheet名获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), "sheet1");

读取大数据量的 Excel

private RowHandler createRowHandler() {
    return new RowHandler() {
        @Override
        public void handle(int sheetIndex, int rowIndex, List<Object> rowlist) {
            Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
        }
    };
}

ExcelUtil.readBySax("aaa.xlsx", 0, createRowHandler());

更多内容大家有时间的话,可以参阅 hutool 的官方文档学习。如果在开发过程中需要写轮子的时候不妨上 Hutool 文档看看,说不定已经有现成的轮子可以使用。大大节省我们的开发效率。

Hutool 官方文档

  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 676 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...