唐宋元明清 唐宋元明清
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
  • Java相关知识
  • 基础

    • Java基础
    • Java扩展
  • 工具

    • hutool工具包
      • 难得糊涂
        • 定时任务
        • 二维码工具
        • 邮件工具
        • Json工具
        • 信息脱敏工具
        • 压缩工具
        • 唯一ID工具
        • 正则工具
        • 身份证工具
        • EasyExcel工具类
        • 代码实现过程
    • Commons类库
    • SQL解析工具
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
    • 策略模式
    • 观察者模式
    • 装饰者模式
    • 工厂模式
    • 单例模式
    • 命令模式
    • 适配器模式与外观模式
    • 模板方法模式
    • 迭代器与组合模式
    • State 模式
    • 代理模式
  • Java相关
  • 工具
Ai
2022-02-23
目录

hutool工具包

# 难得糊涂

导入依赖

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>

# 定时任务

点击查看

cron.setting


# 我是注释  == com.company.aaa.job.TestJob.run = */10 * * * *
[com.hrbu.cron]
定时任务.Test = */10 * * * * *
package com.hrbu.cron;

import cn.hutool.core.lang.Console;
import cn.hutool.cron.CronUtil;
import cn.hutool.cron.task.Task;
import org.junit.Test;

/**
 * 配置文件cron.setting
 */
public class 定时任务 {


    @Test
    public void Main() throws InterruptedException {
        // 配置文件写法不需要调用就可以执行?
        Test2();
        Thread.currentThread().sleep(30000);
    }

    /**
     * 定时任务
     */
    public void Test() {
        System.out.println("hello world!!!");
    }

    /**
     * 动态添加定时任务
     */
    public void Test2() {
        CronUtil.schedule("*/2 * * * * *", new Task() {
            @Override
            public void execute() {
                Console.log("Task excuted.");
            }
        });

        // 支持秒级别定时任务
        CronUtil.setMatchSecond(true);
        CronUtil.start();
    }
}

# 二维码工具

点击查看
        <!-- 二维码依赖 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>${qrcode.version}</version>
        </dependency>
package com.hrbu.extra;

import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import org.junit.Test;

public class 二维码工具 {
    /**
     * 生成二维码
     *
     * 也可以自行设置 1.样式(颜色,边距) 2.logo小图标 3.调整纠错级别
     */
    @Test
    public void Test() {
        // 生成指定url对应的二维码到文件(也可以到流),宽和高都是300像素
        QrCodeUtil.generate("http://aihb.top/", 300, 300, FileUtil.file("D:\\Program Files\\JetBrains\\project\\utils\\a_common\\qrcode.jpg"));

    }

    /**
     * 识别二维码
     */
    @Test
    public void Test2() {
        String decode = QrCodeUtil.decode(FileUtil.file("D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\qrcode.jpg"));
        System.out.println(decode);
    }
}

# 邮件工具

点击查看
        <!-- 邮件依赖 -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>${mail.version}</version>
        </dependency>

mail.setting

# 发件人(必须正确,否则发送失败)
# from = hutool@yeah.net
from = 1714686225@qq.com
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
pass = mmmggnsqvstrdjhe
# 使用SSL安全连接
sslEnable = true
# 邮件服务器的SMTP端口,可选,默认25
port = 465  # 465 587

# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
# host = smtp.qq.com
# 用户名,默认为发件人邮箱前缀
# user = hutool
package com.hrbu.extra;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import org.junit.Test;

/**
 * 配置文件mail.setting
 */
public class 邮件工具 {

    /**
     * 普通文本
     */
    @Test
    public void Test() {
        MailUtil.send("xxx@qq.com", "测试", "邮件来自Hutool测试", false);
    }

    /**
     * 群发
     */
    @Test
    public void Test2() {
        MailUtil.send(CollUtil.newArrayList("xxx@qq.com", "zzz@qq.com"), "测试", "邮件来自Hutool测试", false);
    }

    /**
     * html格式邮件,并增加附件  465端口
     */
    @Test
    public void Test3() {
        MailUtil.send(CollUtil.newArrayList("xxx@qq.com"), "遮天", "遮天第一章", true, FileUtil.file("D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\zt.txt"));
    }
}

# Json工具

点击查看
package com.hrbu.io.json;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Json相关 {

    private String jsonStr = "{\"appId\":\"\",\"timestamp\":1642926098,\"nonceStr\":\"VLyigbixrv\",\"signature\":\"e57e0fdf59ce34efda440153656b72194d3bd9c5\",\"jsApiList\":[\"updateAppMessageShareData\",\"updateTimelineShareData\"]}";

    /**
     * java对象转为Json
     */
    @Test
    public void Test3()  {
        Student student = new Student("1", "ahb", "男", "24");

        // javaBean转为json (不忽略空值)
        JSONObject jsonObject = JSONUtil.parseObj(student, false);
        System.out.println(JSONUtil.toJsonPrettyStr(jsonObject));

        // jsonObject.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置时间格式
    }

    /**
     * XML字符串转换为JSON
     * JSON转换为XML
     *
     * JSON转Bean
     * readXXX : 从JSON文件中读取JSON对象的快捷方法
     */
    @Test
    public void Test2()  {
        // 从文件中读取
        JSON json = JSONUtil.readJSON(new File("src/main/resources/test.json"), StandardCharsets.UTF_8);
        // System.out.println(JSONUtil.toJsonPrettyStr(json));
        System.out.println(JSONUtil.parseObj(json).getJSONArray("jsApiList"));
    }

    /**
     * 根据字符串创建一个json对象
     */
    @Test
    public void Test() {
        // 字符串解析
        JSONObject json1 = JSONUtil.parseObj(jsonStr);
        System.out.println(json1.getStr("timestamp"));
        System.out.println(json1.getInt("timestamp"));
        System.out.println(json1.getLong("timestamp"));
        System.out.println(json1.getDouble("timestamp"));
        System.out.println(json1.getBigDecimal("timestamp"));

        // 格式化json(格式化JSON字符串,此方法并不严格检查JSON的格式正确与否)
        System.out.println(JSONUtil.formatJsonStr(jsonStr));

        // 转换为格式化后的JSON字符串
        System.out.println(JSONUtil.toJsonPrettyStr(jsonStr));
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class Student{
    private String id;
    private String name;
    private String sex;
    private String age;
}

# 信息脱敏工具

点击查看
package com.hrbu.util;

import cn.hutool.core.util.DesensitizedUtil;
import org.junit.Test;

/**
 * 现阶段支持的脱敏数据类型包括:
 *
 * 用户id
 * 中文姓名
 * 身份证号
 * 座机号
 * 手机号
 * 地址
 * 电子邮件
 * 密码
 * 中国大陆车牌,包含普通车辆、新能源车辆
 * 银行卡
 * 整体来说,所谓脱敏就是隐藏掉信息中的一部分关键信息,用*代替,自定义隐藏可以使用StrUtil.hide方法完成。
 */
public class 信息脱敏工具 {

    /**
     * 身份证号脱敏
     */
    @Test
    public void Test() {
        String idCardNum = DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);
        System.out.println(idCardNum);
    }
}

# 压缩工具

点击查看
package com.hrbu.util;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ZipUtil;
import org.junit.Test;

import java.io.File;
import java.util.Collections;
import java.util.zip.ZipEntry;

public class 压缩工具 {

    final String sourceFile = "D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\zt.txt";
    final String sourceFile2 = "D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\num.csv";
    final String tagFile = "D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\all.zip";
    final String tagFile2 = "D:\\Program Files\\JetBrains\\project\\Utils\\a_common\\all";

    /**
     *  zip压缩
     */
    @Test
    public void Test() {
        // ZipUtil.zip(sourceFile, tagFile);

        File zip = ZipUtil.zip(FileUtil.file(tagFile), false,
                FileUtil.file(sourceFile),
                FileUtil.file(sourceFile2));    // 多文件或目录压缩
        System.out.println(zip);
    }

    /**
     *  zip解压缩
     */
    @Test
    public void Test2() {
        File unzip = ZipUtil.unzip(tagFile, tagFile2);
        System.out.println(unzip);
    }


    /**
     * Gzip是网页传输中广泛使用的压缩方式,Hutool同样提供其工具方法简化其过程。
     * ZipUtil.gzip 压缩,可压缩字符串,也可压缩文件 ZipUtil.unGzip 解压Gzip文件
     *
     *
     * ZipUtil.zlib 压缩,可压缩字符串,也可压缩文件 ZipUtil.unZlib 解压zlib文件
     * 注意 ZipUtil默认情况下使用系统编码,也就是说:
     * 如果你在命令行下运行,则调用系统编码(一般Windows下为GBK、Linux下为UTF-8)
     * 如果你在IDE(如Eclipse)下运行代码,则读取的是当前项目的编码(详细请查阅IDE设置,我的项目默认都是UTF-8编码,因此解压和压缩都是用这个编码)
     */
}

# 唯一ID工具

点击查看
package com.hrbu.util;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import org.junit.Test;

public class 唯一ID工具 {
    /**
     * UUID
     */
    @Test
    public void Test() {
        System.out.println(IdUtil.fastUUID());          // 带-的UUID
        System.out.println(IdUtil.fastSimpleUUID());    // 不带-的UUID
    }

    /**
     * ObjectId
     * ObjectId是MongoDB数据库的一种唯一ID生成策略
     */
    @Test
    public void Test2() {
        System.out.println(IdUtil.objectId());
    }

    /**
     * 雪花算法
     * 分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。Twitter的Snowflake 算法就是这种生成器。
     * 注意: IdUtil.createSnowflake每次调用会创建一个新的Snowflake对象,不同的Snowflake对象创建的ID可能会有重复,因此请自行维护此对象为单例,或者使用IdUtil.getSnowflake使用全局单例对象。
     */
    @Test
    public void Test3() {
        // 参数1为终端ID
        // 参数2为数据中心ID
        Snowflake snowflake = IdUtil.getSnowflake(1, 2);
        for (int i = 0; i < 200; i++) {
            System.out.println(snowflake.nextId());
        }
    }

}

# 正则工具

点击查看
package com.hrbu.util;

import cn.hutool.core.util.ReUtil;
import org.junit.Assert;
import org.junit.Test;

import java.util.ArrayList;

public class 正则工具 {

    private final String[] strs = {
            "ZZZaaabbbccc中文1234",
            "ZZZaaabbbccc中文1234,:345/"
    };
    /**
     * 正则提取匹配到的数据
     */
    @Test
    public void Test() {
        String str1 = ReUtil.extractMulti("(\\w+).*(\\d+)", strs[0], "$1\t$2");      // 提取出匹配到的内容
        ArrayList<String> list = ReUtil.findAll("([\\u4e00-\\u9fa5]+)(\\d{2})", strs[0], 2, new ArrayList<String>());     //查找所有匹配文本(0所有 1第一个括号内 2第二个括号内)

        Integer firstNumber = ReUtil.getFirstNumber(strs[1]);                 // 找到匹配到的第一段数字
        boolean match = ReUtil.isMatch("\\w{12}.*\\d{4}", strs[0]);     // 正则式是否完全匹配字符串

        String str2 = ReUtil.replaceAll(strs[1], "(\\d+)", "($1)");// 将匹配到的部分替换为指定值

        String str3 = ReUtil.escape("hello ${world}!!");        // 正则关键字转义


        System.out.println(str1);
        list.forEach(v -> System.out.printf(v + " "));
        System.out.println();
        System.out.println(firstNumber);
        System.out.println(match);
        System.out.println(str2);
        System.out.println(str3);
        // Assert.assertEquals("A-z", str);
    }

    /**
     * 删除匹配到的内容
     */
    @Test
    public void Test2() {
        String str1 = ReUtil.delFirst("\\w+", strs[0]);         // 删除第一次匹配到的内容
        String str2 = ReUtil.delFirst("[\\u4e00-\\u9fa5]+", strs[0]);

        String str3 = ReUtil.delAll("[0-9]{1}", strs[0]);       // 删除所有匹配到的内容
        String str4 = ReUtil.delLast("[0-9]{1}", strs[0]);      // 删除最后一次匹配到的内容
        String str5 = ReUtil.delPre("[0-9]{1}", strs[0]);       // 第一次匹配到字符之前的所有内容

        System.out.println(str1 + "\n" + str2 + "\n" + str3 + "\n" + str4 + "\n" + str5 );
        // Assert.assertEquals("A-z", str);
    }
}

# 身份证工具

点击查看
package com.hrbu.util;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdcardUtil;
import org.junit.Assert;
import org.junit.Test;

public class 身份证工具 {

    /**
     * 身份证相关校验
     */
    @Test
    public void Main(){
        String ID_18 = "321083197812162119";
        String ID_15 = "150102880730303";

        //是否有效
        boolean valid = IdcardUtil.isValidCard(ID_18);
        boolean valid15 = IdcardUtil.isValidCard(ID_15);

        //转换
        String convert15To18 = IdcardUtil.convert15To18(ID_15);
        Assert.assertEquals(convert15To18, "150102198807303035");

        //年龄
        DateTime date = DateUtil.parse("2017-04-10");

        int age = IdcardUtil.getAgeByIdCard(ID_18, date);
        Assert.assertEquals(age, 38);

        int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
        Assert.assertEquals(age2, 28);

        //生日
        String birth = IdcardUtil.getBirthByIdCard(ID_18);
        Assert.assertEquals(birth, "19781216");

        String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
        Assert.assertEquals(birth2, "19880730");

        //省份
        String province = IdcardUtil.getProvinceByIdCard(ID_18);
        Assert.assertEquals(province, "江苏");

        String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
        Assert.assertEquals(province2, "内蒙古");

    }
}

# EasyExcel工具类

# 代码实现过程

点击查看
        <!-- start 学习Excel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <!-- end 学习Excel -->

1. 实体类

  • 首先需要新建实体类,来将excel中每一行数据对应到一个对象中。
  • 注解学习
    • @HeadRowHeight(20) 设置行高
    • @ColumnWidth(25) 设置列宽
    • @ExcelProperty(value = "BAL_ID", index = 0) head名称、下标
    • @ExcelIgnore 处理中忽略的列
    • @DateTimeFormat("yyyy-MM-dd HH:mm:ss") 时间格式化
    • @NumberFormat("#.##%") 接收百分比数据

2. 监听器

  • 继承AnalysisEventListener<实体>类(重写其中两个方法)
    • invoke 读取一条数据,执行一次该方法。可处理每一行数据
    • doAfterAllAnalysed 读取结束后,执行一次该方法

3. 读取

MyDataReadListener myDataReadListener = new MyDataReadListener();
// 封装工作薄对象
ExcelReaderBuilder workBook = EasyExcel.read(sourceFile, MyData.class, myDataReadListener);
// 封装工作表对象
ExcelReaderSheetBuilder sheet = workBook.sheet();
// 读取
sheet.doRead();
return myDataReadListener.getAllData();

4. 自定义拦截器

  • 可以用于指定特定单元格样式
  • 这里实现了RowWriteHandler接口,重写afterRowDispose方法,将对比结果不同的单元格置上不同的前景色
需要了解的类或接口
WorkbookWriteHandler
SheetWriteHandler
RowWriteHandler
CellWriteHandler
DefaultWriteHandlerLoader

5. 写入

EasyExcel.write(tagFile, MyData.class)
        .registerWriteHandler(new 自定义拦截器())
        .sheet()
        .doWrite(数据集(List));

编辑 (opens new window)
上次更新: 2022/08/21, 00:20:31
Java扩展
Commons类库

← Java扩展 Commons类库→

Theme by Vdoing | Copyright © 2022-2025 Ai | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×