目录
Assert 断言工具类
ObjectUtils 对象工具类
Base64Utils Base64 编解码工具类
DigestUtils 摘要工具类
StringUtils 字符串工具类
FileSystemUtils 文件系统工具类
CollectionUtils 集合工具类
SerializationUtils 序列化工具类
1、现在的 Java 开发基本离不开 springframework,而其中 spring-core-x.x.x.RELEASE.jar 核心包下提供了很多实用的工具类,开发中可以直接使用,没必要再自己重复的造轮子。
2、个人觉得 org.springframework.util 包下面的工具类与 apache 提供的工具类虽然大部分相差无几,但还是有互补的地方,开发中基本能满足常用的工具类使用。
1、org.springframework.util.Assert专门用于校验参数是否合法,不合法时抛出 "IllegalArgumentException-非法参数异常"
//比如断言参数不能为 null,Assert 源码如下:
public static void isNull(@Nullable Object object, String message) {
if (object != null) {
throw new IllegalArgumentException(message);
}
}
2、Assert 中提供了常用的参数校验,从方法名字就能一目了然,汇总如下:
方法 | 描述 |
---|---|
doesNotContain(@Nullable String textToSearch, String substring, String message) | 1、断言给定的文本(textToSearch)不包含给定的子字符串(substring), 2、如果 textToSearch 包含子字符串(substring),则抛异常 IllegalArgumentException 3、message:断言失败时要使用的异常消息 |
hasLength(@Nullable String text, String message) | 1、断言给定的字符串不是空的,空格不算作空, 2、如果文本为空,或者为 null,则抛出 IllegalArgumentException |
hasText(@Nullable String text, String message) | 1、断言给定的字符串包含有效的文本内容;text 不能是 null,且必须至少包含一个非空白字符。 2、如果 text 不包含有效的文本内容,则抛出 IllegalArgumentException |
isAssignable(Class> superType, @Nullable Class> subType, String message) | 1、断言 subType 是否为 superType 的子类型,如果不是则抛出 IllegalArgumentException 异常。 2、注意必须是子类型,同一类型也会报错 |
isInstanceOf(Class> type, @Nullable Object obj, String message) | 1、断言所提供的对象(obj)是所提供类(type)的实例。 2、如果对象不是类型的实例,则抛出 IllegalArgumentException |
isNull(@Nullable Object object, String message) | 1、断言对象(object)是 null,如果不是 null,则抛出 IllegalArgumentException |
notNull(@Nullable Object object, String message) | 1、断言对象不是 null,如果是 null,则抛出 IllegalArgumentException |
isTrue(boolean expression, String message) | 1、断言布尔表达式,如果表达式计算结果为 false,则抛出{@link IllegalArgumentException}。 2、message:断言失败时要使用的异常消息 |
state(boolean expression, String message) | 1、断言布尔表达式,如果表达式的计算结果为 false,则抛出 IllegalArgumentException。 2、和 {@link Assert#isTrue(boolean, java.lang.String)} 实现的效果一致. |
noNullElements(@Nullable Object[] array, String message) | 1、断言数组不包含 null 元素。 2、array 可以为 null,可以为空,有元素时,只要有一个为 null,则抛出 IllegalArgumentException |
notEmpty(@Nullable Collection> collection, String message) | 1、断言集合包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException |
notEmpty(@Nullable Map, ?> map, String message) | 断言 Map 包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException |
notEmpty(@Nullable Object[] array, String message) | 断言 array 包含元素,即不能为 null,也不能为空,必须至少包含一个元素,否则抛出 IllegalArgumentException |
在线源码查看:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/AssertTest.java
1、org.springframework.util.ObjectUtils 是 spring-core-x.x.x.RELEASE.jar 核心包下提供的对象工具类,除了提供功能封装之外,还有一个好处就是老板再也不用担心空指针异常。
2、其常用方法如下:
方法 | 描述 |
---|---|
boolean containsElement(@Nullable Object[] array, Object element) | 1、检测数组中是否包含指定的元素,array 为 null 时恒为 false |
String getDisplayString(@Nullable Object obj) | 1、将对象转为可视化的字符串,如果 obj 为 null,则恒返回空字符串""。 2、底层也是调用 {@link ObjectUtils#nullSafeToString(java.lang.Object)} 方法 |
String getIdentityHexString(Object obj) | 1、获取对象唯一的十六进制字符串,实质是将对象的哈希code转成了十六进制字符串 |
String identityToString(@Nullable Object obj) | 1、获取对象的整体标识,obj.getClass().getName() + "@" + getIdentityHexString(obj); 2、如果 obj 为 null,则恒返回空字符串 "" |
boolean isArray(@Nullable Object obj) | 1、判断对象是否为数组,为 null 时恒返回 false |
boolean isCheckedException(Throwable ex) | 1、判断异常是否为受检查异常类型,源码为:!(ex instanceof RuntimeException ex instanceof Error)。 2、即不是运行时异常,也不是 Error 时,则判定 ex 为受检查异常 |
boolean isCompatibleWithThrowsClause(Throwable ex, @Nullable Class>... declaredExceptions) | 1、判断受检查异常(ex)是否为指定的异常类型。 2、如果 ex 为运行时异常(RuntimeException)或者为 Error,则恒返回 true |
boolean isEmpty(@Nullable Object obj) | 1、检测对象是否为空,如果为 null 或者为空,则返回 true,字符串的空格不算空,返回 false.。 2、支持以下类型:{@link Optional}、Array、{@link CharSequence}、{@link Collection}、{@link Map} |
boolean isEmpty(@Nullable Object[] array) | 1、检查数组是否为空,源码:return (array == null || array.length == 0) |
String nullSafeClassName(@Nullable Object obj) | 1、获取对象的 className 值,当 obj 为 null 时返回字符串 "null" |
boolean nullSafeEquals(@Nullable Object o1, @Nullable Object o2) | 1、检查两个对象是否相等,当其中任意一个为 null,另一个不为 null 时,恒返回 false。 2、先根据 "==" 判断,然后判断是否其中一个为 null,接着使用 o1.equals(o2) 比较,然后如果两个对象都是数组,则逐个比较其中的元素是否相等,前面4步都判断不出来,则返回false. |
int nullSafeHashCode(@Nullable Object obj) | 1、获取对象的 哈希 code 值,如果 obj 为null,则返回 0 |
String nullSafeToString(@Nullable Object obj) | 1、返回对象的字符串表现形式,如果 obj 为 null,则返回字符串 "null" |
在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/ObjectUtilsTest.java
import org.springframework.util.Base64Utils;
/**
* @author wangMaoXiong
* @version 1.0
* @date 2020/6/21 12:23
*/
public class Base64UtilsTest {
/**
* 解码:
* byte[] decode(byte[] src)
* byte[] decodeFromString(String src)
* byte[] decodeFromUrlSafeString(String src)
* byte[] decodeUrlSafe(byte[] src)
* 编码:
* byte[] encode(byte[] src)
* String encodeToString(byte[] src)
* String encodeToUrlSafeString(byte[] src)
* byte[] encodeUrlSafe(byte[] src)
*
* @param args
*/
public static void main(String[] args) {
String pass = "123456ppx";
String encodeToString = Base64Utils.encodeToString(pass.getBytes());
byte[] decodeFromString = Base64Utils.decodeFromString(encodeToString);
//源内容:123456ppx
System.out.println("源内容:" + pass);
//编码后:MTIzNDU2cHB4
System.out.println("编码后:" + encodeToString);
//解码后:123456ppx
System.out.println("解码后:" + new String(decodeFromString));
}
}
方法 | 描述 |
---|---|
byte[] md5Digest(byte[] bytes) | 1、对字节数组提取 md5 摘要,返回字节数组 |
byte[] md5Digest(InputStream inputStream) | 2、对字节输入流提取 md5 摘要,返回字节数组,适合对文件进去提取摘要 |
String md5DigestAsHex(byte[] bytes) | 3、对字节数组提取 md5 摘要,以16进制字符串返回 |
String md5DigestAsHex(InputStream inputStream) | 4、对字节输入流提取 md5 摘要,以16进制字符串返回,适合对文件进去提取摘要 |
在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/Base64UtilsTest.java
方法 | 描述 |
---|---|
String[] addStringToArray(@Nullable String[] array, String str) | 1、往数组中添加元素,数组的大小是固定的,底层是使用 System.arraycopy 将旧数组复制到新数组,所以返回值是添加后的新数组。 2、array 等于 null 或者为空时,会自动创建 |
String arrayToCommaDelimitedString(@Nullable Object[] arr) | 1、将数组转成字符串,元素之间默认使用 "," 连接, arr 为 null 或者为空时,返回空字符串 |
String arrayToDelimitedString(@Nullable Object[] arr, String delim) | 1、将数组转成字符串,并使用指定的字符串进行连接 |
String capitalize(String str) | 1、将字符串的首字母转大写,如果 str 为null或者为空,则原样返回 |
String collectionToCommaDelimitedString(@Nullable Collection> coll) | 1、将集合转为字符串,元素之间默认使用 "," 连接,如果 coll 为null或者为空,则返回空字符串 |
String collectionToDelimitedString(@Nullable Collection> coll, String delim) | 2、将集合转为字符串,元素之间使用指定字符串连接,如果 coll 为null或者为空,则返回空字符串 |
String collectionToDelimitedString(@Nullable Collection> coll, String delim, String prefix, String suffix) | 1、将集合(coll)转为字符串,使用指定字符串(delim)连接元素。 2、prefix、suffix 是连接元素时使用前缀与后缀,源码:sb.append(prefix).append(item.next()).append(suffix); 3、所以非常适合用于连接数据库 in 函数的参数,如: in('99pp','887uy','67tf')。4、如果 coll 为null或者为空,则返回空字符串 |
Set commaDelimitedListToSet(@Nullable String str) | 1、将字符串转为 Set,元素使用英文","符号隔开,如果 str 为 null,则返回空集合。 2、返回的集合为 LinkedHashSet |
String[] commaDelimitedListToStringArray(@Nullable String str) | 1、将字符串转为 数组,元素使用英文","符号隔开,如果 str 为 null,则返回空数组 |
String[] delimitedListToStringArray(@Nullable String str, @Nullable String delimiter) | 1、将字符串转为 数组,元素使用指定字符串符号隔开,如果 str 为 null,则返回空数组 |
String[] concatenateStringArrays(@Nullable String[] array1, @Nullable String[] array2) | 1、将两个数组的元素合二为一,成为一个新数组。 2、源码的思路是:如果 array1 为空或者为 null,则直接返回 array2,如果 array2 为空或者为null,则直接返回 array1,最后使用 System.arraycopy 的方式复制新数组 |
boolean containsWhitespace(@Nullable CharSequence str) | 1、检查 str 是否含有空格,空字符串与 null 不算空格 |
boolean containsWhitespace(@Nullable String str) | 1、检查 str 是否含有空格,空字符串与 null 不算空格 |
int countOccurrencesOf(String str, String sub) | 1、检查源字符串(str) 中字符串(sub)出现的次数,如果 str 或者 sub 任意一个为空或者为null,则返回0 |
String getFilename(@Nullable String path) | 1、获取字符串中的文件名称,如 "mypath/myfile.txt" -> "myfile.txt"。 2、如果 path 为 null,则返回 null。路径必须是左斜杠,源码是 path.lastIndexOf("/") 分割取值 |
String getFilenameExtension(@Nullable String path) | 1、获取文件格式,如 "mypath/myfile.txt" -> "txt"。 2、源码: path.lastIndexOf(".") 分割取值 |
boolean hasLength(@Nullable CharSequence str) | 1、检查字符序列是否有长度, str为null或者为空,返回false,否则为true,空格也算有长度 |
boolean hasLength(@Nullable String str) | 1、检查字符串是否有长度, str为null或者为空,返回false,否则为true,空格也算有长度 |
boolean hasText(@Nullable CharSequence str) | 1、检查 str 是否有文本值,空格不算文本,所以 str 为null或者为空,或者空格,都返回 false |
boolean hasText(@Nullable String str) | 1、检查 str 是否有文本值,空格不算文本,所以 str 为null或者为空,或者空格,都返回 false |
boolean isEmpty(@Nullable Object str) | 1、判断对象是否为空,或者为nul,源码:(str == null || "".equals(str)) |
String[] sortStringArray(String[] array) | 1、对数组的中元素进行排序,如果 array 为null或者为空,则返回空数组。 2、数字在前,单词次之,汉字最末,根据 ascii 码排序,底层用的 Arrays.sort(array) |
String[] toStringArray(Collection collection) | 1、将 {@link Collection} 转为数组 |
String[] toStringArray(Enumeration enumeration) | 1、将 {@link Enumeration} 转为数组 |
String trimAllWhitespace(String str) | 去掉 str 中的所有空格 |
String[] trimArrayElements(String[] array) | 去掉数组中所有元素前后的空格 |
在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/StringUtilsTest.java
方法 | 描述 |
---|---|
void copyRecursively(File src, File dest) void copyRecursively(Path src, Path dest) |
1、递归复制源文件或者目录到目标文件或目录,底层使用 {@link Files#copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...)} 2、src、dest 不能为 null,否则非法参数异常。3、src 不存在时抛异常,dest 不存在时会自动创建 |
boolean deleteRecursively(@Nullable File root) boolean deleteRecursively(@Nullable Path root) |
1、递归删除,root 为null,或者不存在,都返回 false。底层使用 {@link Files#delete(java.nio.file.Path)} |
在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/FileSystemUtilsTest.java
方法 | 描述 |
---|---|
boolean contains(@Nullable Enumeration> enumeration, Object element) | 1、检查 enumeration、iterator 中是否含有指定的元素,底层使用 {@link ObjectUtils#nullSafeEquals(java.lang.Object, java.lang.Object)} 2、如果 iterator 为 null,则直接返回 false |
boolean contains(@Nullable Iterator> iterator, Object element) | |
Class> findCommonElementType(Collection> collection) | 1、获取集合中公共的元素类型,集合为null或者为空时,返回 null。 2、集合中元素如果有多种类型,则返回 null,会遍历其中某一个元素 |
boolean isEmpty(@Nullable Collection> collection) boolean isEmpty(@Nullable Map, ?> map) |
1、判断集合或者map是否为null或者为空,源码:(collection == null || collection.isEmpty()) |
void mergeArrayIntoCollection(@Nullable Object array, Collection collection) | 1、将数组元素添加到集合中 |
void mergePropertiesIntoMap(@Nullable Properties props, Map |
1、将属性文件(props)中的值添加/提取到 map 中 |
在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/CollectionUtilsTest.java
1、byte[] serialize(@Nullable Object object):对象序列化
2、Object deserialize(@Nullable byte[] bytes):对象反序列化
import com.wmx.apachestudy.pojo.Person;
import org.springframework.util.SerializationUtils;
import java.util.Date;
/**
* @author wangMaoXiong
* @version 1.0
* @date 2020/6/21 13:56
*/
public class SerializationUtilsTest {
public static void main(String[] args) {
//被序列化的实体必须 implements Serializable 接口
Person person = new Person(1001,"华安",new Date(),8998.87f);
byte[] serialize = SerializationUtils.serialize(person);
Object deserialize = SerializationUtils.deserialize(serialize);
System.out.println(deserialize);
}
}
在线源码 https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/spring/SerializationUtilsTest.java