关于Hutool的模块使用说明方法

在这里插入图片描述

Hutool(文档地址:https://hutool.cn/docs/)是一个广受欢迎的Java工具类库,以其小巧全面和提供静态方法封装而著称。它通过简化API的使用,降低了学习成本,提升了开发效率,让Java语言的使用体验更加接近函数式编程的优雅

Hutool包含多个模块,每个模块针对特定的功能需求提供支持:

• hutool-aop:JDK动态代理封装,为非IOC环境提供切面支持。

• hutool-bloomFilter:布隆过滤器,提供基于Hash算法的实现。

• hutool-cache:简单的缓存实现。

• hutool-core:核心模块,包含Bean操作、日期处理等多种工具。

• hutool-cron:定时任务模块,支持类似Crontab的表达式。

• hutool-crypto:加密解密模块,封装了对称、非对称及摘要算法。

• hutool-db:基于JDBC的数据操作封装,采用ActiveRecord思想。

• hutool-dfa:基于DFA模型的多关键字查找。

• hutool-extra:扩展模块,封装第三方服务如模板引擎、邮件、Servlet等。

• hutool-http:基于HttpUrlConnectionHttpClient封装。

• hutool-log:自动识别日志实现的日志门面。

• hutool-script:脚本执行封装,如Javascript。

• hutool-setting:功能强大的配置文件和Properties封装。

• hutool-system:系统参数调用封装,如JVM信息。

• hutool-json:JSON实现。

• hutool-captcha:图片验证码实现。

• hutool-poi:针对POIExcelWord封装。

• hutool-socket:基于Java NIOAIOSocket封装。

• hutool-jwt:JSON Web TokenJWT)封装。

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

Hutool的使用,在Maven项目中,可以通过添加以下依赖来引入Hutool:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.28</version>
</dependency>

HTTP请求示例
Hutool简化了HTTP请求的处理,以下是发送GET和POST请求的示例:

public static void main(String[] args) {
 	// GET请求示例
     String content = HttpUtil.get("https://www.example.com/api/data");

     // POST请求示例
     HashMap<String, Object> param = new HashMap<>();
     param.put("city", "重庆");
     String result = HttpUtil.post("https://www.example.com/api/post", param);

     System.out.println("GET请求返回:" + content);
     System.out.println("POST请求返回:" + result);
}

随机验证码生成方法

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.crypto.SecureUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
/**
 * 系统基础信息--图片验证码管理模块
 * @author weimeilayer@gmail.com
 * @date 2021年3月17日 图片验证码(支持算术形式)
 */
@CrossOrigin
@RestController
@AllArgsConstructor
@RequestMapping("/code")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
@Tag(description = "图片验证码模块操作接口", name = "图片验证码模块操作接口")
public class SysCaptchaController {
	/**
	 * 宽
	 */
	private final Integer WIDTH = 120;
	/**
	 * 高
	 */
	private final Integer HEIGHT = 40;
	/**
	 * 编码长度
	 */
	private final Integer CODE_COUNT = 4;
	/**
	 * 干扰线数
	 */
	private final Integer LINE_COUNT = 20;
	/**
	 * 验证码长度
	 */
	private final Integer CODE_SIZE = 4;
	/**
	 * RedisTemplate
	 */
	private final RedisTemplate redisTemplate;
	/**
	 * 验证码有效期
	 */
	private final Integer CODE_TIME = 60;
	/**
	 * 验证码前缀
	 */
	private final String DEFAULT_CODE_KEY = "DEFAULT_CODE_KEY:";
	/**
	 * 验证码
	 * 
	 * @param key
	 * @return
	 */
	@Operation(summary = "生成字节流验证码")
	@GetMapping(value = "/captcha/{key}")
	public R randomImage(@PathVariable String key) {
		// 第一种:验证码纯数字化
		RandomGenerator randomGenerator = new RandomGenerator("0123456789", CODE_SIZE );
		LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(WIDTH, HEIGHT, CODE_COUNT, LINE_COUNT);
		// 调用父类的 setGenerator() 方法,设置验证码的类型
		lineCaptcha.setGenerator(randomGenerator);
		String code = lineCaptcha.getCode();
		String realKey = SecureUtil.md5(code + key);
		redisTemplate.opsForValue().set(DEFAULT_CODE_KEY  + realKey, code, CODE_TIME,TimeUnit.SECONDS);
		Map<String, String> res = new HashMap<>(2);
		res.put("realKey", realKey);
		res.put("img", lineCaptcha.getImageBase64Data());
		//第二种:验证码含字母
        /*LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(WIDTH, HEIGHT, CODE_COUNT, LINE_COUNT);
        String code = lineCaptcha.getCode();
        String realKey = SecureUtil.md5(code + key);
        if (GlobalConfig.isRedisSwitch()) {
            redisTemplate.opsForValue().set(DEFAULT_CODE_KEY   + realKey, code, CODE_TIME, TimeUnit.SECONDS);
        }
        Map<String, String> res = new HashMap<>(2);
        res.put("realKey", realKey);
        res.put("img", lineCaptcha.getImageBase64());*/
		return R.ok(res);
	}

拼音工具

导入
import cn.hutool.extra.pinyin.PinyinUtil;

// 获取全部拼音 输出结果:ni hao
String pinyin = PinyinUtil.getPinyin("你好", " ");
// 获取拼音首字母 输出结果:h s d y g
String result = PinyinUtil.getFirstLetter("H是第一个", ", ");

数字处理工具,包括保留小数、时间格式化、校验数字和生成随机数

import cn.hutool.core.lang.Console;
import cn.hutool.core.util.NumberUtil;

/**
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2023年5月20日 🐬🐇 💓💕
 */
public class NumberUtilExample {

     public static void main(String[] args) {
	 	double number1 = 1234.56789;
        double number2 = 9876.54321;
        // 保留小数点后两位,并以字符串形式返回
        String rounded1 = NumberUtil.roundStr(number1, 2);
        String rounded2 = NumberUtil.roundStr(number2, 2);

        Console.log("保留小数点后两位:");
        Console.log(rounded1); // 输出: 1234.57
        Console.log(rounded2); // 输出: 9876.54

        // 保留小数点后四位,并返回double类型
        BigDecimal rounded3 = NumberUtil.round(number1, 4);
        BigDecimal rounded4 = NumberUtil.round(number2, 4);

        Console.log("保留小数点后四位:");
        Console.log(rounded3); // 输出: 1234.5679
        Console.log(rounded4); // 输出: 9876.5432
	}
}

数据脱敏
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.DesensitizedUtil;

/**
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2024年3月5日 🐬🐇 💓💕
 */
 public class DesensitizedUtilExample {
 	public static void main(String[] args) {
        // 身份证号脱敏
        String idCard = "222222202205201314";
        String desensitizedIdCard = DesensitizedUtil.idCardNum(idCard, 1, 2);
        Console.log("原始身份证号: " + idCard);
        Console.log("脱敏后身份证号: " + desensitizedIdCard); // 输出: 2***************14
        
        // 手机号脱敏
        String phoneNumber = "13800001314";
        String desensitizedPhone = DesensitizedUtil.mobilePhone(phoneNumber);
        Console.log("原始手机号: " + phoneNumber);
        Console.log("脱敏后手机号: " + desensitizedPhone); // 输出: 138****1314

        // 密码脱敏
        String password = "1234567890";
        String desensitizedPassword = DesensitizedUtil.password(password);
        Console.log("原始密码: " + password);
        Console.log("脱敏后密码: " + desensitizedPassword); // 输出: **********
    }
}

布隆过滤器

import cn.hutool.bloomfilter.BitMapBloomFilter;
import cn.hutool.core.lang.Console;

/**
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2024年3月5日 🐬🐇 💓💕
 */
public class BloomFilterExample {
    public static void main(String[] args) {
        // 初始化布隆过滤器,预期容量为5个城市名
        BitMapBloomFilter filter = new BitMapBloomFilter(5);
        // 添加城市名
        filter.add("北京");
        filter.add("上海");
        filter.add("广州");
        // 查找城市名
        boolean exists1 = filter.contains("北京");
        boolean exists2 = filter.contains("深圳");
        Console.log("布隆过滤器测试:");
        Console.log("是否存在 '北京': " + exists1); // 输出: true
        Console.log("是否存在 '深圳': " + exists2); // 输出: false
    }
}

Hutool的MailUtil简化了邮件发送过程,以下是发送邮件的示例

import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;

/**
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2024年3月5日 🐬🐇 💓💕
 */
public class MailUtilExample {
    public static void main(String[] args) {
        // 发件人邮箱配置
        MailAccount mailAccount = new MailAccount();
        mailAccount.setHost("smtp.example.com");
        mailAccount.setPort(465); // SMTP端口
        mailAccount.setAuth(true);
        mailAccount.setFrom("sender@example.com");
        mailAccount.setUser("sender@example.com");
        mailAccount.setPass("password"); // 发件人邮箱密码或授权码
        // 收件人邮箱
        String to = "recipient@example.com";
        // 发送邮件
        MailUtil.send(mailAccount, to, "测试邮件", "这是一封来自Hutool的测试邮件。");
    }
}

HTTP请求示例
Hutool简化了HTTP请求的处理,以下是发送GET和POST请求的示例:

// GET请求
String content = HttpUtil.get(url);
// POST请求
HashMap<String, Object> param = new HashMap<>();
param.put("city", "重庆");
String result = HttpUtil.post("https://www.baidu.com", param);

随机验证码生成
Hutool提供了生成随机验证码的功能,如下是生成4位随机验证码的代码:

String verificationCode = RandomUtil.randomStringUpper(4);
计时器
Hutool提供了计时器功能,可以计算方法或过程的执行时间:

```bash
TimeInterval timer = DateUtil.timer();
// 执行具体业务
timer.interval();  // 花费毫秒数
timer.intervalRestart();  // 返回花费时间,并重置开始时间

数字工具
Hutool的NumberUtil提供了一系列数字处理工具,包括保留小数、时间格式化、校验数字和生成随机数等:

// 保留小数
double te1 = 123456.123456;
double te2 = 123456.128456;
Console.log(NumberUtil.round(te1, 4));  // 结果: 123456.1235
Console.log(NumberUtil.roundStr(te2, 2));  // 结果: 123456.13

// 时间格式化
long c = 299792458;  // 光速
String format = NumberUtil.decimalFormat(",###", c);  // 299,792,458

数据脱敏
Hutool提供了数据脱敏功能,可以隐藏敏感信息:

// 身份证号脱敏 5***************00
DesensitizedUtil.idCardNum("500228200009222500", 1, 2);

// 手机号脱敏 138****0000
DesensitizedUtil.mobilePhone("13843800000");

// 密码脱敏 **********
DesensitizedUtil.password("1234567890");

布隆过滤器
Hutool提供了布隆过滤器的实现,用于快速判断元素是否可能存在于集合中

// 初始化布隆过滤器
BitMapBloomFilter filter = new BitMapBloomFilter(10);
filter.add("123");
filter.add("abc");
filter.add("def");
// 查找元素
filter.contains("abc");

读取txt文本,sql文件

private List<String> tempList() throws IOException {
    List<String> list = new ArrayList<>();
    String fileName = "D://1.sql";
    String path = prefixPath + fileName;
    FileReader fileReader = new FileReader(path);
    BufferedReader reader = fileReader.getReader();
    String text = null;
    while ((text = reader.readLine()) != null) {
        list.add(text);
    }
    reader.close();
    return list;
}

读取csv文件数据

public void readerCsv() {
    try {
         List<String> list = tempList();
         String fileCsvName = "20240807.csv";
         String path = prefixPath + fileCsvName;
         File file = new File(path);
         CsvReader csvReader = new CsvReader();
         CsvData csvData = csvReader.read(file);
         List<CsvRow> dataRows = csvData.getRows();
         for (int i = 1; i < dataRows.size(); i++) {
             CsvRow csvRow = dataRows.get(i);
             String tid = csvRow.get(0);               
         }
     } catch (IOException e) {
         e.printStackTrace();
     }
 }

JSON转换

import cn.hutool.json.JSONUtil;

String jsonStr = "{\"name\":\"曼陀罗\",\"age\":18}";
JSONObject jsonObject = JSONUtil.parseObj(jsonStr ); // 将JSON字符串转换为JSON对象

Excel读取

import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelReader;

ExcelReader reader = ExcelUtil.getReader("data.xlsx"); // 读取Excel文件
List<List<Object>> dataList = reader.read(); // 读取数据

图像缩放

import cn.hutool.core.img.ImgUtil;

ImgUtil.scale(new File("input.jpg"), new File("output.jpg"), 0.5f); // 缩放图像大小

解析Cron表达式

import cn.hutool.cron.CronUtil;

String cron = "0 0/1 * * * ?";
CronUtil.schedule("testJob", cron, () -> System.out.println("执行任务")); // 解析Cron表达式并执行任务
CronUtil.start();

文件读取

import cn.hutool.core.io.FileUtil;

String content = FileUtil.readUtf8String("1.txt"); // 读取文件内容

字符串判空和非空检查

import cn.hutool.core.util.StrUtil;

String str = "Hello, World!";
boolean isEmpty = StrUtil.isEmpty(str); // 检查字符串是否为空
boolean isNotEmpty = StrUtil.isNotEmpty(str); // 检查字符串是否非空

字符串拼接

String str1 = "Hello";
String str2 = "World";
String result = StrUtil.format("{} {}!", str1, str2); // 使用{}占位符拼接字符串

日期格式化

import cn.hutool.core.date.DateUtil;

Date date = new Date();
String formattedDate = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"); // 格式化日期

日期计算

import cn.hutool.core.date.DateUtil;

Date now = new Date();
Date nextDay = DateUtil.offsetDay(now, 1); // 计算下一天的日期

文件复制

import cn.hutool.core.io.FileUtil;
FileUtil.copy("source.txt", "new.txt", true); // 复制文件,第三个参数表示是否覆盖

SHA-256加密

import cn.hutool.crypto.digest.DigestUtil;

String pwd= "123456";
String sha256Hash = DigestUtil.sha256Hex(pwd); // 计算SHA-256哈希值

URL编码和解码

import cn.hutool.core.util.URLUtil;

String url = "https://hutool.cn/docs";
String encodedUrl = URLUtil.encode(url); // URL编码
String decodedUrl = URLUtil.decode(encodedUrl); // URL解码

判断文件是否存在

import cn.hutool.core.io.FileUtil;
boolean fileExists = FileUtil.exist("example.txt"); // 判断文件是否存在

AES加密和解密

import cn.hutool.crypto.symmetric.SymmetricCrypto;
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, "3A8494AA66C508E9EE8C147E7693EABC");
String content = "敏感数据";
String encrypted = aes.encryptBase64(content); // AES加密
String decrypted = aes.decryptStr(encrypted); // AES解密

URL构建

import cn.hutool.http.HtmlUtil;

String baseUrl = "https://www.baidu.com";
String query = "search?q=Hutool-All";
String completeUrl = HtmlUtil.encodeUrl(baseUrl, query); // 构建带查询参数的URL

XML解析

import cn.hutool.core.util.XmlUtil;

String xml = "<user><name>mandala</name><age>18</age></user>";
Element root = XmlUtil.readXML(xml);
String name = XmlUtil.elementText(root, "name"); // 解析XML文档

文件写入
import cn.hutool.core.io.FileUtil;

String content = "This is txt.";
FileUtil.writeUtf8String(content, "example.txt"); // 写入文件内容
身份证号码验证
import cn.hutool.core.util.IdcardUtil;
String idCard = "500228200009222000";
boolean valid = IdcardUtil.isValidCard(idCard); // 验证身份证号码是否有效
生成UUID
import cn.hutool.core.util.IdUtil;

String uuid = IdUtil.simpleUUID(); // 生成简单UUID
HTTP下载文件
import cn.hutool.http.HttpUtil;

HttpUtil.downloadFile("https://www.baidu.com/file.zip", "downloaded.zip"); // 下载文件
Map转换为Bean
import cn.hutool.core.bean.BeanUtil;

Map<String, Object> map = new HashMap<>();
map.put("name", "mandala");
map.put("age", 18);
User user = BeanUtil.mapToBean(map, User.class, true); // 将Map转换为Java Bean
Enum转换工具
import cn.hutool.core.util.EnumUtil;

EnumUtil.fromString(WeekEnum.class, "SUNDAY"); // 通过名称获取Enum常量
IP地址验证
import cn.hutool.core.util.NetUtil;

boolean validIp = NetUtil.isUsableLocalPort(80); // 检查端口是否可用
读取系统属性
import cn.hutool.system.SystemUtil;

String osName = SystemUtil.get("os.name"); // 读取系统属性
正则表达式匹配
import cn.hutool.core.util.ReUtil;

String content = "The price is $100.99";
String regex = "The price is \\$(\\d+\\.\\d+)";
String price = ReUtil.get(regex, content, 1); // 使用正则表达式匹配并提取价格
Base64编码
import cn.hutool.core.codec.Base64;

String source = "Base64 Encoding";
String encoded = Base64.encode(source); // 进行Base64编码
String decoded = Base64.decodeStr(encoded); // 进行Base64解码
随机数生成
import cn.hutool.core.util.RandomUtil;

int randomInt = RandomUtil.randomInt(1, 100); // 生成指定范围内的随机整数
获取类加载器
import cn.hutool.core.util.ClassLoaderUtil;

ClassLoader classLoader = ClassLoaderUtil.getClassLoader(); // 获取当前线程的类加载器
获取文件后缀名
import cn.hutool.core.io.FileUtil;

String fileName = "1.txt";
String extension = FileUtil.extName(fileName); // 获取文件的后缀名
LRU缓存
import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;

Cache<String, String> lruCache = CacheUtil.newLRUCache(100);
lruCache.put("key", "value");
String value = lruCache.get("key"); // 获取LRU缓存中的值
XML格式化
import cn.hutool.core.util.XmlUtil;
String xml = "<user><name>Mandal</name><age>18</age></user>";
String formattedXml = XmlUtil.format(xml); // 格式化XML文档
路径拼接
import cn.hutool.core.io.FileUtil;

String path1 = "D:\\example";
String path2 = "1.txt";
String fullPath = FileUtil.join(path1, path2); // 拼接路径
CSV读取
import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;

CsvReader reader = new CsvReader("data.csv", CharsetUtil.CHARSET_UTF_8);
CsvData data = reader.read(); // 读取CSV文件内容
Base58编码
import cn.hutool.core.util.StrUtil;

String input = "Base58 Encoding";
String encoded = StrUtil.base58Encode(input); // 进行Base58编码
String decoded = StrUtil.base58Decode(encoded); // 进行Base58解码
URL参数解析
import cn.hutool.http.HtmlUtil;

String query = "name=Mandala&age=18";
Map<String, String> paramMap = HtmlUtil.decodeParamMap(query, "UTF-8"); // 解析URL参数
对象克隆
import cn.hutool.core.util.ObjectUtil;

User original = new User("Mandala", 18);
User clone = ObjectUtil.cloneByStream(original); // 使用流实现对象深克隆
BigDecimal运算
import cn.hutool.core.util.NumberUtil;

BigDecimal num1 = new BigDecimal("10.5");
BigDecimal num2 = new BigDecimal("5.2");
BigDecimal result = NumberUtil.add(num1, num2); // 使用BigDecimal进行精确运算

URL链接合并
import cn.hutool.core.util.URLUtil;

String base = "https://www.baidu.com";
String relative = "/resource";
String fullUrl = URLUtil.complateUrl(base, relative); // 合并URL链接
List分组
import cn.hutool.core.collection.CollUtil;

List<String> data = Arrays.asList("A", "B", "C", "D", "E");
List<List<String>> groups = CollUtil.subList(data, 2); // 将List分成指定大小的子List
环境变量获取
import cn.hutool.core.util.StrUtil;
String javaHome = StrUtil.format("Java Home: {}", SystemUtil.get("java.home")); // 获取系统环境变量
获取远程文件大小
import cn.hutool.http.HttpUtil;

long fileSize = HttpUtil.downloadFile("https://www.baidu.com/file.zip", FileUtil.file("temp.zip")).length(); // 获取远程文件
线程休眠
import cn.hutool.core.thread.ThreadUtil;
ThreadUtil.sleep(2000); // 休眠2秒
对象比较
import cn.hutool.core.util.ObjectUtil;

boolean isEqual = ObjectUtil.equal(obj1, obj2); // 比较两个对象是否相等
ZIP文件解压
import cn.hutool.core.util.ZipUtil;

ZipUtil.unzip("example.zip", "destinationDir"); // 解压ZIP文件到指定目录
Map键值互换
import cn.hutool.core.collection.CollUtil;

Map<String, Integer> originalMap = new HashMap<>();
Map<Integer, String> swappedMap = CollUtil.reverse(originalMap); // 交换Map的键和值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀͜͡傀儡师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值