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

简介: 不要再重复造轮子了,Hutool这款开源工具类库贼好使


顺带说说 classpath。


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


image.png


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


image.png


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


假设在 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

是不是电话号码

等等

image.png


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

Validator.isMobile("itwanger.com");


相关文章
|
数据可视化 Ubuntu Linux
研发实用工具,推荐一款代码统计神器GitStats
研发实用工具,推荐一款代码统计神器GitStats
1403 0
研发实用工具,推荐一款代码统计神器GitStats
|
7月前
|
前端开发 Java 程序员
Eolink神技之四、IDEA工具插件Eolink ApiKit
Eolink神技之四、IDEA工具插件Eolink ApiKit
237 0
|
前端开发 测试技术 API
干掉丑陋的 Swagger,堪称开发者的瑞士军刀
“为什么改了这个没告诉我”,“实际功能和文档上说的不一样啊”。这些话大家做开发的想必耳朵都听出老茧了。真不是故意的,有时候任务比较急,就先改了代码,想着以后再同步文档,然后就给忘了。项目更新又全靠社交软件通知,人一多难免有一两个没及时沟通到的。确实给合作的小伙伴带来麻烦,但说实话开发商也挺委屈的。
|
人工智能 Go
神级插件Bito介绍及使用
神级插件Bito介绍及使用
|
SQL 前端开发 JavaScript
不可不知的八个出色的Java项目
不可不知的八个出色的Java项目
232 0
|
缓存 安全 JavaScript
别再造轮子了,Google 开源的 Guava 工具库真心强大!
别再造轮子了,Google 开源的 Guava 工具库真心强大!
干掉 PowerDesigner!这款国人开源的数据库设计工具真香
当我们在项目开发初期时,往往需要设计大量的表,此时使用数据库设计工具就会比较高效!今天给大家推荐一款国人开源的数据库设计工具chiner,界面漂亮,功能强大,希望对大家有所帮助!
|
缓存 搜索推荐 Java
go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
最近在看一些go语言相关的书,发现了一个有意思的事情:其中一本书最新印刷的版本是2017年3月,而golang包管理的后起之秀go module伴随go1.11于2018年8月诞生
1314 0
go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
|
缓存 安全 Java
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
346 0
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
|
监控 前端开发 jenkins
我用这一招让团队的开发效率提升了 100%!
我在一家做微信营销的公司干技术 leader,带 40 多个人,公司名就不说了。在这个位置上做了好几年,把团队从小带大,公司虽然不算风口浪尖上的高增长业务,但技术这块儿也从来没出过什么问题,我还是蛮自豪的。

热门文章

最新文章

相关实验场景

更多