java开发神辅助--Hutool工具类库
Hutool 简称糊涂工具
寓意追求“万事都作糊涂观,无所谓失,无所谓得
Hutool 轻量(不依赖任何jar包)、干练(工具类一个比一个香)
而且Hutool的官方文档也是解释的很清晰
下面小编向大家介绍一下Hutool的使用 相信你也会爱上他的
先上jar包下载地址
-
https://repo1.maven.org/maven...
安装难度并不大 所以不做太多介绍
Hutool核心(Hutool-core)
本文主要介绍Hutool比较核心的内容
控制台打印封装 lang.Console
从此以后不用System.out.println打天下
Hutool对java的打印语句也做了封装 Console下的log 和error方法
log等同于System.out.println
error 等同于System.err.println
但是你要仅仅这么认为那就错了 Hutool对打印语句的封装不是仅仅把他封装成一个方法 同时支持了类似于Slf4j的字符串模板语法
比如 大家都熟知的 打印数组 如果用System.out.println的话显然打印不出我们想要的结果
但是log会自动将对象(包括数组)转为字符串形式
//利用静态导包来简化代码
String[] s= {"1","2","3"};
out.println(s);
Ljava.lang.String;@3f8f9dd6
log(s);
//[1, 2, 3]
//所以说如果你在项目中引用了Hutool工具库的话 你会选择log吗
//反正小编是爱不释手了
万能转换器 convert.Convert
Convert是小编最爱技术之一
解放双手感觉再一次啪啪的打到了脸上
常见类型转换
//转为字符串 toStr()
int i=1;
String str3 = toStr(i);
log(str3);// 1
double[] d= {1.0,2.0,3.0};
String str4 = toStr(d);
log(str4);// [1.0, 2.0, 3.0]
//转为指定类型数组
String str5="12345";
//结果为Integer数组
Integer[] intArray = toIntArray(str5);
log(intArray);// [12345]
long[] cstr = {1,2,3,4,5};
//结果为Integer数组
Integer[] intArray2 = toIntArray(cstr);
log(intArray2);// [1, 2, 3, 4, 5]
//转换为集合
char[] charl= {'a','b','c','d'};
toList(charl).forEach(Console::log);
// a b c d
//转换为日期
String str6 = "2017-05-06";
Date value = Convert.toDate(str6);
//当然了 如果你觉得上面这些对应的方法还是麻烦的话 可以用convert方法:
//集合转为字符串
convert(String.class,List.of(1,2,3,4));
//数组转为集合
int[] ic= {1,2,3,4};
convert(List.class,ic);
其他类型转换器
//泛型类型
//通过convert(TypeReference<T> reference, Object value)方法,
//自行new一个TypeReference对象可以对嵌套泛型进行类型转换。
//例如,我们想转换一个对象为List<String>类型,
//此时传入的标准Class就无法满足要求,此时我们可以这样:
Object[] ao = { "a", "你", "好", "", 1 };
List<String> listf = convert(new TypeReference<List<String>>() {}, ao);
//半角和全角转换
String sa = "123456789";
String ssbc = toSBC(sa);
//"123456789"
//半角->全角
String dbc = toDBC(ssbc);
//123456789
//全角->半角
//金额大小写转换digitToChinese
double dou = 67556.32;
String dig = digitToChinese(a);
log(dig);// 壹仟贰佰叁拾肆元整
//包装类与原始类型转换
//去包装
Class<?> wrapClass = Integer.class;
Class<?> unWraped = Convert.unWrap(wrapClass);
log(unWraped);// int
//包装
Class<?> primitiveClass = long.class;
Class<?> wraped = Convert.wrap(primitiveClass);
log(wrapClass);// class java.lang.Integer
//比较有趣的农历日期 ChineseDate
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
log(date.getChineseMonth());
// 正月
log(date.getChineseMonthName());
// 初一
log(date.getChineseDay());
// 庚子
log(date.getCyclical());
// 鼠
log(date.getChineseZodiac());
// 春节
log(date.getFestivals());
// 庚子鼠年 正月初一
log(date.toString());
IO的相关处理
FileUtil 文件工具类
总体来说,FileUtil类包含以下几类操作工具:
文件操作:包括文件目录的新建、删除、复制、移动、改名等
文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等。
绝对路径:针对ClassPath中的文件转换为绝对路径文件。
文件名:主文件名,扩展名的获取
- 对文件本身的操作:
exist 判断文件是否存在
getAbsolutePath获取绝对路径
getName获取文件名
extName 获取文件扩展名
ls 列出目录和文件
touch 创建文件,如果父目录不存在也自动创建
mkdir 创建目录,会递归创建每层目录
del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令
copy 拷贝文件或目录
rename(File file, String newName, boolean isRetainExt, boolean isOverride)
修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
isRetainExt为true时,保留原扩展名:
为false则相反
- 对文件内容的操作:
/**
* 读操作:包括类似IoUtil中的getReader、readXXX操作
* 写操作:包括getWriter和writeXXX操作
*/
getInputStream() 获得一个读入流对象
getOutputStream 获得一个输出流对象
getReader 获得一个带缓存的读入对象
getWriter 获得一个带缓存的写入对象
getPrintWriter(File file, String charset, boolean isAppend)
获得一个打印写入对象,可以有print
writeLines 将列表写入文件
writeMap(Map<?,?> map, File file, Charset charset, String kvSeparator, boolean isAppend)
将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔
FileReader、FileWriter 文件读取写入类
FileReader 和FileWriter 这两个类是Hutool为分清职责而创建的对文件读写操作类
官方说明 比较推荐用更方便的FileUtil 进行文件操作
文件读取-FileReader:
//创建方式:
FileUtil.touch("t.txt");
FileReader fileReader = new FileReader("t.txt");
FileReader fileReader3 = new FileReader(new File("t.txt"));
FileReader fileReader2 = FileReader.create(new File("t.txt"));
//第二个参数都可设置编码格式
//方法:
fileReader.readLines();//从文件中读取一行内容
fileReader.readString();//读取文件内容
文件写入-FileWriter:
//创建方式:
FileWriter fileWriter = new FileWriter("t.txt");
FileWriter fileWriter2 = new FileWriter(new File("t.txt"));
FileWriter fileWriter3 = FileWriter.create(new File("t.txt"));
//方法:
fileWriter.append("abc");//将字符串追加到文件中
fileWriter.appendLines(List.of(1,2,3));//将列表追加到文件中
fileWriter.write("abc");//将字符串写入覆盖到文件中
fileWriter.writeLines(List.of(1,2,3));//将列表覆盖到文件中
fileWriter.writeMap(map, kvSeparator, isAppend)
//将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔 第三个参数设置是否追加
字符串的处理 util.StrUtil
由于字符串的处理比较多 小编只抽取一些比较典型的作为案例
大家可以参考文章最后的链接继续探索
- 字符串的截取
//字符截取 sub
//与jdk中不同的是 改方法不会抛出异常 、-1代表最后一个字符、传参顺序不重要
//ps: 依旧是包含小值 不包含大值
String su="abcde";
log(StrUtil.sub(su,3,1));//bc
log(StrUtil.sub(su,2,-1));//cd
- 用字符串模板代替字符串拼接
String format="{}我的月工资是:{}";
String format2 = StrUtil.format(format, "呵呵",100);
log(format2);
//听说是作者的最骄傲工程之一??? 哈哈哈 厉害了
- 对字符串 内容的判断:
//判断字符串是否为空或空格 是则返回true
//hasEmpty 只能判断是否为空或为null
boolean hasEmpty = StrUtil.hasEmpty(" ");
log(hasEmpty);// false
//hasBlank 可判断是否为空或者不可见
boolean hasBlank = StrUtil.hasBlank(" ");
log(hasBlank);//true
boolean blank2 = StrUtil.containsBlank("1 2 3 4");//判断字符串中是否包含空
log(blank2);//true
String blank = StrUtil.cleanBlank("1 2 3 4");//清空字符串中空白字符
log(blank);//1234
boolean contains = StrUtil.contains("12345", "12");//判断指定字串或字符在字符串中是否出现过
log(contains);//true
String reverse = StrUtil. reverse("12345");//翻转字符串
log(reverse);//54321
- 计算两个字符串的相似度
double similar2 = StrUtil.similar("123", "234");
log(similar2);//0.6666666667
String similar = StrUtil.similar("123", "234",100);
//计算两个字符串的相似度百分比
log(similar);//66.66666667%
- 获取Stringbuilder对象:
StringBuilder builder2 = StrUtil.builder();
集合相关
集合工具 collection.CollUtil
- 集合的创建:
//当然了 跟Guava中集合的创建类似
HashMap<String, String> hashMap = CollUtil.newHashMap();
HashSet<String> set = CollUtil.newHashSet();
ArrayList<String> arrayList = newArrayList();
//可以利用静态导包 减少代码
- 集合转字符串 join
//集合转字符串
String string2 = CollUtil.join(List.of("a","b","c","d","e"), "#"); //string2 -> a#b#c#d#e
- 两个集合 合并为map
//zip 将两个集合或者数组的元素一一对应
String[] string3 = new String[]{"a", "b", "c"};
Integer[] ints = new Integer[]{1, 2, 3};
Map<String, Integer> treeMap = zip(string3,ints);
System.out.println(treeMap); // {a=1, b=2, c=3}
String string4 = "a,b,c";
String string5 = "1,2,3";
Map<String, String> map2 =CollUtil.zip(string4,string5, ",");
System.out.println(map2); // {a=1, b=2, c=3}
- 统计集合中元素个数 countMap
//countMap(Iterable<T> collection)
//根据集合返回一个元素计数的 Map
//所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
Map<Integer, Integer> map3 = CollUtil.countMap(List.of(1,2,3,4,2,3));
log(map3);//{1=1, 2=2, 3=2, 4=1}
列表工具 ListUtil
- filter 过滤列表
List<String> list2 = ListUtil.toLinkedList("1", "2", "3");
List<String> filter = ListUtil.filter(list2, Str->"hehe"+Str);
log(filter);//[hehe1, hehe2, hehe3]
- 获取满足指定规则所有的元素的位置:
List<String> list3 = ListUtil.toLinkedList("1", "2", "3", "4", "3", "2", "1");
int[] indexArray = ListUtil.indexOfAll(list3, "2"::equals);
// [1, 5]
Map工具 MapUtil
- of 将多个键值对添加到map中
Map<Object, Object> map4 = MapUtil.of(new String[][] {
{"1", "A"},
{"2", "B"},
{"3", "C"}
});
//{1=A, 2=B, 3=C}
BiMap 双向映射的Map
和Guava中的BiMap类似
BiMap<String, Integer> biMap = new BiMap<>(new HashMap<>());
biMap.put("aaa", 111);
biMap.put("bbb", 222);
// 111
biMap.get("aaa");
// 222
biMap.get("bbb");
// aaa
biMap.getKey(111);
// bbb
biMap.getKey(222);
线程安全的HashSet-ConcurrentHashSet
使用方式跟普通的HashSet一样
Hutool只是借助Jdk中的ConcurrentHashMap封装了线程安全的ConcurrentHashSet
Hutool参考文档:
-
官方文档:
-
参考API:
-
B站Hutool创始人讲解视频:(资源稀缺哦 大家赶紧上吧)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。