功能强大的java工具库Hutool

Hutool是一个小而全的Java工具类库,它通过静态方法封装,降低了相关API的学习成本,提高了工作效率,使Java拥有函数式语言般的优雅。以下是关于Hutool的详细介绍:

一、基本信息

  • 名称:Hutool
  • 寓意:Hu(谐音“糊涂”) + tool,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。
  • 开发者:由国内开发者林智能(looly)开发并维护。
  • 版本:截至当前时间(2024年08月08日),最新版本可能有所更新,但可参考的版本如v5.8.29等。

二、功能特点

  1. 简洁易用:提供简单而一致的API,使开发者能够快速上手并提高开发效率。
  2. 功能丰富:涵盖了Java开发底层代码中的方方面面,包括但不限于文件、流、加密解密、转码、正则、线程、XML等,并组成各种Util工具类。
  3. 高性能:在实现上注重性能优化,采用高效的算法和数据结构,处理大规模数据和高并发场景表现出色。
  4. 可靠稳定:经过广泛测试和实际应用验证,具有良好的稳定性和可靠性。

三、核心模块

  1. 日期时间操作:提供方便的日期时间操作方法,支持日期格式化、解析、计算、比较等。
  2. 加密解密:支持常见的加密解密算法,如MD5、SHA1、AES、DES等,通过简单的API调用实现数据的加密和解密。
  3. 文件操作:提供文件读写、复制、移动、删除等操作的方法,方便开发者进行文件管理和处理。
  4. 网络通信:封装了HTTP客户端和服务端的操作方法,支持HTTP请求发送和接收,简化了网络通信的实现。
  5. 类型转换:提供了一整套的类型转换解决方案,并通过ConverterRegistry工厂类自定义转换。
  6. 字符串处理:提供丰富的字符串处理方法,如判断字符串是否为空、截取、拼接、格式化等。

四、使用示例

在Maven项目中,只需在pom.xml文件中添加Hutool的依赖即可使用。例如:

<dependency>  
    <groupId>cn.hutool</groupId>  
    <artifactId>hutool-all</artifactId>  
    <version>最新版本号</version> <!-- 请替换为实际使用的版本号 -->  
</dependency>

使用示例(字符串处理):

import cn.hutool.core.util.StrUtil;  
  
public class HutoolExample {  
    public static void main(String[] args) {  
        String str = "Hello, Hutool!";  
        System.out.println(StrUtil.isEmpty(str)); // 判断字符串是否为空  
        System.out.println(StrUtil.sub(str, 0, 5)); // 截取字符串  
    }  
}

使用示例(文件读写):

//默认UTF-8编码,可以在构造中传入第二个参数做为编码
FileReader fileReader = new FileReader("test.properties");
String result = fileReader.readString();
//获取文件类型
File file = FileUtil.file("d:/test.jpg");
String type = FileTypeUtil.getType(file);
//文件内容追加
FileAppender appender = new FileAppender(file, 16, true);
appender.append("123");
appender.append("abc");
appender.append("xyz");

使用示例(压缩包处理):

//将aaa目录下的所有文件目录打包到d:/aaa.zip
ZipUtil.zip("d:/aaa");
//将aaa目录下的所有文件目录打包到d:/bbb/目录下的aaa.zip文件中
// 此处第二个参数必须为文件,不能为目录
ZipUtil.zip("d:/aaa", "d:/bbb/aaa.zip");

//将aaa目录下的所有文件目录打包到d:/bbb/目录下的ccc.zip文件中
ZipUtil.zip("d:/aaa", "d:/bbb/ccc.zip");
//将aaa目录以及其目录下的所有文件目录打包到d:/bbb/目录下的ccc.zip文件中
ZipUtil.zip("d:/aaa", "d:/bbb/ccc.zip", true);
//将test.zip解压到e:\\aaa目录下,返回解压到的目录
File unzip = ZipUtil.unzip("E:\\aaa\\test.zip", "e:\\aaa");

使用示例(信息脱敏):

// 身份证 5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);
// 手机号 180****1999
DesensitizedUtil.mobilePhone("18049531999");

使用示例(http请求):

// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");

// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);

//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result3= HttpUtil.get("https://www.baidu.com", paramMap);

//post请求
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);

//文件上传
HashMap<String, Object> paramMap = new HashMap<>();
//文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
paramMap.put("file", FileUtil.file("D:\\face.jpg"));
String result= HttpUtil.post("https://www.baidu.com", paramMap);

//文件下载
String fileUrl = "http://mirrors.sohu.com/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso";
//将文件下载后保存在E盘,返回结果为下载文件大小
long size = HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"));
System.out.println("Download size: " + size);

使用示例(表达式执行):

ExpressionEngine engine = new JexlEngine();

final Dict dict = Dict.create()
        .set("a", 100.3)
        .set("b", 45)
        .set("c", -199.100);

// -143.8
final Object eval = engine.eval("a-(b-c)", dict);

使用示例(数据库操作):

Connection conn = null;
try {
    conn = ds.getConnection();
    // 执行非查询语句,返回影响的行数
    int count = SqlExecutor.execute(conn, "UPDATE " + TABLE_NAME + " set field1 = ? where id = ?", 0, 0);
    log.info("影响行数:{}", count);
    // 执行非查询语句,返回自增的键,如果有多个自增键,只返回第一个
    Long generatedKey = SqlExecutor.executeForGeneratedKey(conn, "UPDATE " + TABLE_NAME + " set field1 = ? where id = ?", 0, 0);
    log.info("主键:{}", generatedKey);

    /* 执行查询语句,返回实体列表,一个Entity对象表示一行的数据,Entity对象是一个继承自HashMap的对象,存储的key为字段名,value为字段值 */
    List<Entity> entityList = SqlExecutor.query(conn, "select * from " + TABLE_NAME + " where param1 = ?", new EntityListHandler(), "值");
    log.info("{}", entityList);
} catch (SQLException e) {
    Log.error(log, e, "SQL error!");
} finally {
    DbUtil.close(conn);

使用示例(邮件发送):

//发送普通文本邮件
MailUtil.send("hutool@foxmail.com", "测试", "邮件来自Hutool测试", false);
//发送HTML格式的邮件并附带附件
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/aaa.xml"));
//群发邮件
ArrayList<String> tos = CollUtil.newArrayList(
    "person1@bbb.com", 
    "person2@bbb.com", 
    "person3@bbb.com", 
    "person4@bbb.com");
MailUtil.send(tos, "测试", "邮件来自Hutool群发测试", false);

使用示例(excel写入处理):

List<String> row1 = CollUtil.newArrayList("aa", "bb", "cc", "dd");
List<String> row2 = CollUtil.newArrayList("aa1", "bb1", "cc1", "dd1");
List<String> row3 = CollUtil.newArrayList("aa2", "bb2", "cc2", "dd2");
List<String> row4 = CollUtil.newArrayList("aa3", "bb3", "cc3", "dd3");
List<String> row5 = CollUtil.newArrayList("aa4", "bb4", "cc4", "dd4");
List<List<String>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);
//通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx");
//通过构造方法创建writer
//ExcelWriter writer = new ExcelWriter("d:/writeTest.xls");

//跳过当前行,既第一行,非必须,在此演示用
writer.passCurrentRow();

//合并单元格后的标题行,使用默认标题样式
writer.merge(row1.size() - 1, "测试标题");
//一次性写出内容,强制输出标题
writer.write(rows, true);
//关闭writer,释放内存
writer.close();

使用示例(word写入处理):

Word07Writer writer = new Word07Writer();

// 添加段落(标题)
writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "我是第一部分", "我是第二部分");
// 添加段落(正文)
writer.addText(new Font("宋体", Font.PLAIN, 22), "我是正文第一部分", "我是正文第二部分");
// 写出到文件
writer.flush(FileUtil.file("e:/wordWrite.docx"));
// 关闭
writer.close();

使用示例(图片处理):

//图片缩放
ImgUtil.scale(
    FileUtil.file("d:/face.jpg"), 
    FileUtil.file("d:/face_result.jpg"), 
    0.5f//缩放比例
);
//图片裁剪
ImgUtil.cut(
    FileUtil.file("d:/face.jpg"), 
    FileUtil.file("d:/face_result.jpg"), 
    new Rectangle(200, 200, 100, 100)//裁剪的矩形区域
);
//类型转换
ImgUtil.convert(FileUtil.file("e:/test2.png"), FileUtil.file("e:/test2Convert.jpg"));

//添加水印
ImgUtil.pressText(//
    FileUtil.file("e:/pic/face.jpg"), //
    FileUtil.file("e:/pic/test2_result.png"), //
    "版权所有", Color.WHITE, //文字
    new Font("黑体", Font.BOLD, 100), //字体
    0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
    0, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
    0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
);
//图片旋转
// 旋转180度
BufferedImage image = ImgUtil.rotate(ImageIO.read(FileUtil.file("e:/pic/366466.jpg")), 180);
ImgUtil.write(image, FileUtil.file("e:/pic/result.png"));

五、总结

Hutool是一个功能强大且易用的Java工具库,它通过提供丰富的功能和简化常见任务的方法,使得Java开发变得更加高效和便捷。无论是字符串处理、日期时间操作、加密解密还是文件操作和网络通信,Hutool都提供了简单而强大的工具,是Java开发者的全能工具库。

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

易道合之逍遥峰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值