不要再重复造*了,Hutool这款开源工具类库贼好使(2)


顺带说说 classpath。


在实际编码当中,我们通常需要从某些文件里面读取一些数据,比如配置文件、文本文件、图片等等,那这些文件通常放在什么位置呢?


不要再重复造*了,Hutool这款开源工具类库贼好使(2)


放在项目结构图中的 resources 目录下,当项目编译后,会出现在 classes 目录下。对应磁盘上的目录如下图所示:


不要再重复造*了,Hutool这款开源工具类库贼好使(2)


当我们要读取文件的时候,我是不建议使用绝对路径的,因为操作系统不一样的话,文件的路径标识符也是不一样的。最好使用相对路径。


假设在 src/resources 下放了一个文件 origin.txt,文件的路径参数如下所示:


FileUtil.getInputStream("origin.txt")


假设文件放在 src/resources/hutool 目录下,则路径参数改为:


FileUtil.getInputStream("hutool/origin.txt")


05、字符串工具


Hutool 封装的字符串工具类 StrUtil 和 Apache Commons Lang 包中的 StringUtils 类似,作者认为优势在于 Str 比 String 短,尽管我不觉得。不过,我倒是挺喜欢其中的一个方法的:


String template = "{},一枚沉默但有趣的程序员,喜欢他的文章的话,请微信搜索{}";

String str = StrUtil.format(template, "沉默王二", "沉默王二");

// 沉默王二,一枚沉默但有趣的程序员,喜欢他的文章的话,请微信搜索沉默王二


06、反射工具


反射机制可以让 Java 变得更加灵活,因此在某些情况下,反射可以做到事半功倍的效果。Hutool 封装的反射工具 ReflectUtil 包括:


获取构造方法

获取字段

获取字段值

获取方法

执行方法(对象方法和静态方法)

package com.itwanger.hutool.reflect;

import cn.hutool.core.util.ReflectUtil;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectDemo {
    private int id;

    public ReflectDemo() {
        System.out.println("构造方法");
    }

    public void print() {
        System.out.println("我是沉默王二");
    }

    public static void main(String[] args) throws IllegalAccessException {
        // 构建对象
        ReflectDemo reflectDemo = ReflectUtil.newInstance(ReflectDemo.class);

        // 获取构造方法
        Constructor[] constructors = ReflectUtil.getConstructors(ReflectDemo.class);
        for (Constructor constructor : constructors) {
            System.out.println(constructor.getName());
        }

        // 获取字段
        Field field = ReflectUtil.getField(ReflectDemo.class, "id");
        field.setInt(reflectDemo, 10);
        // 获取字段值
        System.out.println(ReflectUtil.getFieldValue(reflectDemo, field));

        // 获取所有方法
        Method[] methods = ReflectUtil.getMethods(ReflectDemo.class);
        for (Method m : methods) {
            System.out.println(m.getName());
        }

        // 获取指定方法
        Method method = ReflectUtil.getMethod(ReflectDemo.class, "print");
        System.out.println(method.getName());


        // 执行方法
        ReflectUtil.invoke(reflectDemo, "print");
    }
}


07、压缩工具

在 Java 中,对文件、文件夹打包压缩是一件很繁琐的事情,Hutool 封装的 ZipUtil 针对 java.util.zip 包做了优化,可以使用一个方法搞定压缩和解压,并且自动处理文件和目录的问题,不再需要用户判断,大大简化的压缩解压的复杂度。


ZipUtil.zip("hutool", "hutool.zip");

File unzip = ZipUtil.unzip("hutool.zip", "hutoolzip");


08、身份证工具


Hutool 封装的 IdcardUtil 可以用来对身份证进行验证,支持大陆 15 位、18 位身份证,港澳台 10 位身份证。


String ID_18 = "321083197812162119";

String ID_15 = "150102880730303";


boolean valid = IdcardUtil.isValidCard(ID_18);

boolean valid15 = IdcardUtil.isValidCard(ID_15);


09、扩展 HashMap


Java 中的 HashMap 是强类型的,而 Hutool 封装的 Dict 对键的类型要求没那么严格。


Dict dict = Dict.create()
        .set("age", 18)
        .set("name", "沉默王二")
        .set("birthday", DateTime.now());
int age = dict.getInt("age");
String name = dict.getStr("name");


10、控制台打印


本地编码的过程中,经常需要使用 System.out 打印结果,但是往往一些复杂的对象不支持直接打印,比如说数组,需要调用 Arrays.toString。Hutool 封装的 Console 类借鉴了 JavaScript 中的 console.log(),使得打印变成了一个非常便捷的方式。


public class ConsoleDemo {
    public static void main(String[] args) {
        // 打印字符串
        Console.log("沉默王二,一枚有趣的程序员");
        // 打印字符串模板
        Console.log("洛阳是{}朝古都",13);
        int [] ints = {1,2,3,4};
        // 打印数组
        Console.log(ints);
    }
}


11、字段验证器


做 Web 开发的时候,后端通常需要对表单提交过来的数据进行验证。Hutool 封装的 Validator 可以进行很多有效的条件验证:


是不是邮箱

是不是 IP V4、V6

是不是电话号码

等等

不要再重复造*了,Hutool这款开源工具类库贼好使(2)


Validator.isEmail("沉默王二");

Validator.isMobile("itwanger.com");


上一篇:区块链教程Fabric1.0源代码分析配置交易-生成通道配置二


下一篇:华为鸿蒙操作系统,究竟会在何时发布?