hutool-utils工具类说明

ProxyUtil

代理工具类

方法 介绍
newProxyInstance(ClassLoader classloader, InvocationHandler invocationHandler, Class<?>... interfaces) 创建动态代理对象
动态代理对象的创建原理是:
假设创建的代理对象名为 Proxy0<br>1interfacesinterfaces<br>2classloderjvmProxy0<br> 1、根据传入的interfaces动态生成一个类,实现interfaces中的接口<br> 2、通过传入的classloder将刚生成的类加载到jvm中。即将Proxy0类load
3、调用Proxy0Proxy0的Proxy0(InvocationHandler)构造函数 创建Proxy0interfaces<br>4Proxy0的对象,并且用interfaces参数遍历其所有接口的方法,这些实现方法的实现本质上是通过反射调用被代理对象的方法<br> 4、将Proxy0的实例返回给客户端。
5、当调用代理类的相应方法时,相当于调用 InvocationHandler.invoke(Object, java.lang.reflect.Method, Object[]) 方法
newProxyInstance(InvocationHandler invocationHandler, Class<?>... interfaces) 创建动态代理对象
proxy(T target, Aspect aspect) 使用切面代理对象
proxy(T target, Class<? extends Aspect> aspectClass) 使用切面代理对象

BloomFilterUtil

布隆过滤器工具

方法 介绍
createBitMap(int m) 创建BitMap实现的布隆过滤器
createBitSet(int c, int n, int k) 创建一个BitSet实现的布隆过滤器,过滤器的容量为c * n 个bit.

CacheUtil

缓存工具类

方法 介绍
newFIFOCache(int capacity) 创建FIFO(first in first out) 先进先出缓存.
newFIFOCache(int capacity, long timeout) 创建FIFO(first in first out) 先进先出缓存.
newLFUCache(int capacity) 创建LFU(least frequently used) 最少使用率缓存.
newLFUCache(int capacity, long timeout) 创建LFU(least frequently used) 最少使用率缓存.
newLRUCache(int capacity) 创建LRU (least recently used)最近最久未使用缓存.
newLRUCache(int capacity, long timeout) 创建LRU (least recently used)最近最久未使用缓存.
newNoCache() 创建无缓存实现.
newTimedCache(long timeout) 创建定时缓存.
newWeakCache(long timeout) 创建弱引用缓存.

CaptchaUtil

图形验证码工具

方法 介绍
createCircleCaptcha(int width, int height) 创建圆圈干扰的验证码,默认5位验证码,15个干扰圈
createCircleCaptcha(int width, int height, int codeCount, int circleCount) 创建圆圈干扰的验证码
createGifCaptcha(int width, int height) 创建GIF验证码
createGifCaptcha(int width, int height, int codeCount) 创建GIF验证码
createLineCaptcha(int width, int height) 创建线干扰的验证码,默认5位验证码,150条干扰线
createLineCaptcha(int width, int height, int codeCount, int lineCount) 创建线干扰的验证码
createShearCaptcha(int width, int height) 创建扭曲干扰的验证码,默认5位验证码
createShearCaptcha(int width, int height, int codeCount, int thickness) 创建扭曲干扰的验证码,默认5位验证码

AnnotationUtil

注解工具类

快速获取注解对象、注解值等工具封装

方法 介绍
getAnnotation(AnnotatedElement annotationEle, Class annotationType) 获取指定注解
getAnnotations(AnnotatedElement annotationEle, boolean isToCombination) 获取指定注解
getAnnotationValue(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType) 获取指定注解默认值
如果无指定的属性方法返回null
getAnnotationValue(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType, String propertyName) 获取指定注解属性的值
如果无指定的属性方法返回null
getAnnotationValueMap(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType) 获取指定注解中所有属性值
如果无指定的属性方法返回null
getRetentionPolicy(Class<? extends Annotation> annotationType) 获取注解类的保留时间,可选值 SOURCE(源码时),CLASS(编译时),RUNTIME(运行时),默认为 CLASS
getTargetType(Class<? extends Annotation> annotationType) 获取注解类可以用来修饰哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等
hasAnnotation(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType) 检查是否包含指定注解指定注解
isDocumented(Class<? extends Annotation> annotationType) 是否会保存到 Javadoc 文档中
isInherited(Class<? extends Annotation> annotationType) 是否可以被继承,默认为 false
setValue(Annotation annotation, String annotationField, Object value) 设置新的注解的属性(字段)值
toCombination(AnnotatedElement annotationEle) 将指定的被注解的元素转换为组合注解元素

BeanUtil

Bean工具类

方法 介绍
beanToMap(Object bean) 对象转Map,不进行驼峰转下划线,不忽略值为空的字段
beanToMap(Object bean, boolean isToUnderlineCase, boolean ignoreNullValue) 对象转Map
beanToMap(Object bean, Map<String,Object> targetMap, boolean isToUnderlineCase, boolean ignoreNullValue) 对象转Map
beanToMap(Object bean, Map<String,Object> targetMap, boolean ignoreNullValue, Editor keyEditor) 对象转Map
通过实现Editor 可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:
beanToMap(Object bean, Map<String,Object> targetMap, CopyOptions copyOptions) 对象转Map
通过自定义CopyOptions 完成抓换选项,以便实现:
copyProperties(Object source, Class tClass, String... ignoreProperties) 按照Bean对象属性创建对应的Class对象,并忽略某些属性
copyProperties(Object source, Object target, boolean ignoreCase) 复制Bean对象属性
copyProperties(Object source, Object target, CopyOptions copyOptions) 复制Bean对象属性
限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类
copyProperties(Object source, Object target, String... ignoreProperties) 复制Bean对象属性
限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类
copyToList(Collection<?> collection, Class targetType) 复制集合中的Bean属性
此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。
copyToList(Collection<?> collection, Class targetType, CopyOptions copyOptions) 复制集合中的Bean属性
此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。
createDynaBean(Object bean) 创建动态Bean
descForEach(Class<?> clazz, Consumer<? super PropDesc> action) 遍历Bean的属性
edit(T bean, Editor editor) 编辑Bean的字段,static字段不会处理
例如需要对指定的字段做判空操作、null转""操作等等。
fillBean(T bean, ValueProvider valueProvider, CopyOptions copyOptions) 填充Bean的核心方法
fillBeanWithMap(Map map, T bean, boolean isIgnoreError) 使用Map填充Bean对象
fillBeanWithMap(Map map, T bean, boolean isToCamelCase, boolean isIgnoreError) 使用Map填充Bean对象,可配置将下划线转换为驼峰
fillBeanWithMap(Map map, T bean, boolean isToCamelCase, CopyOptions copyOptions) 使用Map填充Bean对象
fillBeanWithMap(Map map, T bean, CopyOptions copyOptions) 使用Map填充Bean对象
fillBeanWithMapIgnoreCase(Map map, T bean, boolean isIgnoreError) 使用Map填充Bean对象,忽略大小写
findEditor(Class<?> type) 查找类型转换器 PropertyEditor
getBeanDesc(Class<?> clazz) 获取BeanDesc Bean描述信息
getFieldValue(Object bean, String fieldNameOrIndex) 获得字段值,通过反射直接获得字段值,并不调用getXXX方法
对象同样支持Map类型,fieldNameOrIndex即为key Map: fieldNameOrIndex需为key,获取对应value Collection: fieldNameOrIndex当为数字,返回index对应值,非数字遍历集合返回子bean对应name值 Array: fieldNameOrIndex当为数字,返回index对应值,非数字遍历数组返回子bean对应name值
getProperty(Object bean, String expression) 解析Bean中的属性值
getPropertyDescriptor(Class<?> clazz, String fieldName) 获得Bean类属性描述,大小写敏感
getPropertyDescriptor(Class<?> clazz, String fieldName, boolean ignoreCase) 获得Bean类属性描述
getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase) 获得字段名和字段描述Map,获得的结果会缓存在 BeanInfoCache中
getPropertyDescriptors(Class<?> clazz) 获得Bean字段描述数组
hasGetter(Class<?> clazz) 判断是否为Bean对象
判定方法是否存在只有无参数的getXXX方法或者isXXX方法
hasNullField(Object bean, String... ignoreFiledNames) 判断Bean是否包含值为null的属性
对象本身为null也返回true
hasPublicField(Class<?> clazz) 指定类中是否有public类型字段(static字段除外)
hasSetter(Class<?> clazz) 判断是否有Setter方法
判定方法是否存在只有一个参数的setXXX方法
isBean(Class<?> clazz) 判断是否为Bean对象,判定方法是:
isEmpty(Object bean, String... ignoreFiledNames) 判断Bean是否为空对象,空对象表示本身为null或者所有属性都为null
此方法不判断static属性
isMatchName(Object bean, String beanClassName, boolean isSimple) 给定的Bean的类名是否匹配指定类名字符串
如果isSimple为false,则只匹配类名而忽略包名,例如:cn.hutool.TestEntity只匹配TestEntity
如果isSimple为true,则匹配包括包名的全类名,例如:cn.hutool.TestEntity匹配cn.hutool.TestEntity
isNotEmpty(Object bean, String... ignoreFiledNames) 判断Bean是否为非空对象,非空对象表示本身不为null或者含有非null属性的对象
isReadableBean(Class<?> clazz) 判断是否为可读的Bean对象,判定方法是:
mapToBean(Map map, Class beanClass, boolean isIgnoreError) Deprecated.
请使用 toBean(Object, Class) 或 toBeanIgnoreError(Object, Class)
mapToBean(Map map, Class beanClass, boolean isToCamelCase, CopyOptions copyOptions) Map转换为Bean对象
mapToBean(Map map, Class beanClass, CopyOptions copyOptions) Deprecated.
请使用 toBean(Object, Class, CopyOptions)
mapToBeanIgnoreCase(Map map, Class beanClass, boolean isIgnoreError) Deprecated.
请使用 toBeanIgnoreCase(Object, Class, boolean)
setFieldValue(Object bean, String fieldNameOrIndex, Object value) 设置字段值,通过反射设置字段值,并不调用setXXX方法
对象同样支持Map类型,fieldNameOrIndex即为key
setProperty(Object bean, String expression, Object value) 解析Bean中的属性值
toBean(Class beanClass, ValueProvider valueProvider, CopyOptions copyOptions) ServletRequest 参数转Bean
toBean(Object source, Class clazz) 对象或Map转Bean
toBean(Object source, Class clazz, CopyOptions options) 对象或Map转Bean
toBeanIgnoreCase(Object source, Class clazz, boolean ignoreError) 对象或Map转Bean,忽略字段转换时发生的异常
toBeanIgnoreError(Object source, Class clazz) 对象或Map转Bean,忽略字段转换时发生的异常
trimStrFields(T bean, String... ignoreFields) 把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。

CollectionUtil

集合相关工具类,包括数组,是CollUtil 的别名工具类类

方法 介绍

CollStreamUtil

集合的stream操作封装

方法 介绍
group2Map(Collection collection, Function<E,T> key1, Function<E,U> key2) 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map
Collection ---> Map<T,Map<U,E>>
groupBy2Key(Collection collection, Function<E,K> key1, Function<E,U> key2) 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map
Collection ---> Map<T,Map<U,List>>
groupByKey(Collection collection, Function<E,K> key) 将collection按照规则(比如有相同的班级id)分类成map
Collection -------> Map<K,List>
merge(Map<K,X> map1, Map<K,Y> map2, BiFunction<X,Y,V> merge) 合并两个相同key类型的map
toIdentityMap(Collection collection, Function<V,K> key) 将collection转化为类型不变的map
Collection ----> Map<K,V>
toList(Collection collection, Function<E,T> function) 将collection转化为List集合,但是两者的泛型不同
Collection ------> List
toMap(Collection collection, Function<E,K> key, Function<E,V> value) 将Collection转化为map(value类型与collection的泛型不同)
Collection -----> Map<K,V>
toSet(Collection collection, Function<E,T> function) 将collection转化为Set集合,但是两者的泛型不同
Collection ------> Set

CollUtil

集合相关工具类

方法 介绍
addAll(Collection collection, Enumeration enumeration) 加入全部
addAll(Collection collection, Iterable iterable) 加入全部
addAll(Collection collection, Iterator iterator) 加入全部
addAll(Collection collection, Object value) 将指定对象全部加入到集合中
提供的对象如果为集合类型,会自动转换为目标元素类型
addAll(Collection collection, Object value, Type elementType) 将指定对象全部加入到集合中
提供的对象如果为集合类型,会自动转换为目标元素类型
如果为String,支持类似于[1,2,3,4] 或者 1,2,3,4 这种格式
addAll(Collection collection, T[] values) 加入全部
addAllIfNotContains(List list, List otherList) 将另一个列表中的元素加入到列表中,如果列表中已经存在此元素则忽略之
asEnumeration(Iterator iter) Iterator转换为Enumeration
asIterable(Iterator iter) Iterator 转为 Iterable
asIterator(Enumeration e) Enumeration转换为Iterator
clear(Collection<?>... collections) 清除一个或多个集合内的元素,每个集合调用clear()方法
contains(Collection<?> collection, Object value) 判断指定集合是否包含指定值,如果集合为空(null或者空),返回false,否则找到元素返回true
contains(Collection collection, Predicate<? super T> containFunc) 自定义函数判断集合是否包含某类值
containsAll(Collection coll1, Collection coll2) 集合1中是否包含集合2中所有的元素,即集合2是否为集合1的子集
containsAny(Collection coll1, Collection coll2) 其中一个集合在另一个集合中是否至少包含一个元素,即是两个集合是否至少有一个共同的元素
count(Iterable iterable, Matcher matcher) 集合中匹配规则的数量
countMap(Iterable collection) 根据集合返回一个元素计数的 Map
所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
例如:[a,b,c,c,c] 得到:
a: 1
b: 1
c: 3
create(Class<?> collectionType) 创建新的集合对象
defaultIfEmpty(T collection, Supplier<? extends T> supplier) 如果给定集合为空,返回默认集合
defaultIfEmpty(T collection, T defaultCollection) 如果给定集合为空,返回默认集合
disjunction(Collection coll1, Collection coll2) 两个集合的差集
针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留两个集合中此元素个数差的个数
例如:
distinct(Collection collection) 去重集合
edit(Collection collection, Editor editor) 编辑,此方法产生一个新集合
编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
empty(Class<?> collectionClass) 根据给定的集合类型,返回对应的空集合,支持类型包括: *
emptyIfNull(List list) 如果提供的集合为null,返回一个不可变的默认空集合,否则返回原集合
空集合使用Collections.emptyList()
emptyIfNull(Set set) 如果提供的集合为null,返回一个不可变的默认空集合,否则返回原集合
空集合使用Collections.emptySet()
extract(Iterable<?> collection, Editor editor) 通过Editor抽取集合元素中的某些值返回为新列表
例如提供的是一个Bean列表,通过Editor接口实现获取某个字段值,返回这个字段值组成的新列表
extract(Iterable<?> collection, Editor editor, boolean ignoreNull) 通过Editor抽取集合元素中的某些值返回为新列表
例如提供的是一个Bean列表,通过Editor接口实现获取某个字段值,返回这个字段值组成的新列表
fieldValueAsMap(Iterable<?> iterable, String fieldNameForKey, String fieldNameForValue) 两个字段值组成新的Map
fieldValueMap(Iterable iterable, String fieldName) 字段值与列表值对应的Map,常用于元素对象中有唯一ID时需要按照这个ID查找对象的情况
例如:车牌号 =》车
filter(T collection, Filter filter) 去除指定元素,此方法直接修改原集合
filterNew(Collection collection, Filter filter) 过滤
过滤过程通过传入的Filter实现来过滤返回需要的元素内容,这个Filter实现可以实现以下功能:
findOne(Iterable collection, Filter filter) 查找第一个匹配元素对象
findOneByField(Iterable collection, String fieldName, Object fieldValue) 查找第一个匹配元素对象
如果集合元素是Map,则比对键和值是否相同,相同则返回
如果为普通Bean,则通过反射比对元素字段名对应的字段值是否相同,相同则返回
如果给定字段值参数是null 且元素对象中的字段值也为null则认为相同
forEach(Enumeration enumeration, CollUtil.Consumer consumer) 循环遍历 Enumeration,使用CollUtil.Consumer 接受遍历的每条数据,并针对每条数据做处理
forEach(Iterable iterable, CollUtil.Consumer consumer) 循环遍历 Iterable,使用CollUtil.Consumer 接受遍历的每条数据,并针对每条数据做处理
forEach(Iterator iterator, CollUtil.Consumer consumer) 循环遍历 Iterator,使用CollUtil.Consumer 接受遍历的每条数据,并针对每条数据做处理
forEach(Map<K,V> map, CollUtil.KVConsumer<K,V> kvConsumer) 循环遍历Map,使用CollUtil.KVConsumer 接受遍历的每条数据,并针对每条数据做处理
和JDK8中的map.forEach不同的是,此方法支持index
get(Collection collection, int index) 获取集合中指定下标的元素值,下标可以为负数,例如-1表示最后一个元素
如果元素越界,返回null
getAny(Collection collection, int... indexes) 获取集合中指定多个下标的元素值,下标可以为负数,例如-1表示最后一个元素
getElementType(Iterable<?> iterable) 获得Iterable对象的元素类型(通过第一个非空元素判断)
getElementType(Iterator<?> iterator) 获得Iterator对象的元素类型(通过第一个非空元素判断)
getFieldValues(Iterable<?> collection, String fieldName) 获取给定Bean列表中指定字段名对应字段值的列表
列表元素支持Bean与Map
getFieldValues(Iterable<?> collection, String fieldName, boolean ignoreNull) 获取给定Bean列表中指定字段名对应字段值的列表
列表元素支持Bean与Map
getFieldValues(Iterable<?> collection, String fieldName, Class elementType) 获取给定Bean列表中指定字段名对应字段值的列表
列表元素支持Bean与Map
getFirst(Iterable iterable) 获取集合的第一个元素
getFirst(Iterator iterator) 获取集合的第一个元素
getLast(Collection collection) 获取集合的最后一个元素
group(Collection collection, Hash32 hash) 分组,按照Hash32接口定义的hash算法,集合中的元素放入hash值对应的子列表中
groupByField(Collection collection, String fieldName) 根据元素的指定字段名分组,非Bean都放在第一个分组中
hasNull(Iterable<?> iterable) 是否包含null元素
indexOf(Collection collection, Matcher matcher) 获取匹配规则定义中匹配到元素的第一个位置
此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
indexOfAll(Collection collection, Matcher matcher) 获取匹配规则定义中匹配到元素的所有位置
此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
intersection(Collection coll1, Collection coll2) 两个集合的交集
针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最少的个数
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c, c],此结果中只保留了两个c
intersection(Collection coll1, Collection coll2, Collection... otherColls) 多个集合的交集
针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最少的个数
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c, c],此结果中只保留了两个c
intersectionDistinct(Collection coll1, Collection coll2, Collection... otherColls) 多个集合的交集
针对一个集合中存在多个相同元素的情况,只保留一个
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c],此结果中只保留了一个c
isEmpty(Collection<?> collection) 集合是否为空
isEmpty(Enumeration<?> enumeration) Enumeration是否为空
isEmpty(Iterable<?> iterable) Iterable是否为空
isEmpty(Iterator<?> Iterator) Iterator是否为空
isEmpty(Map map) Map是否为空
isEqualList(Collection list1, Collection list2) 判断两个Collection 是否元素和顺序相同,返回true的条件是: 两个Collection必须长度相同 两个Collection元素相同index的对象必须equals,满足Objects.equals(Object, Object) 此方法来自Apache-Commons-Collections4。
isNotEmpty(Collection<?> collection) 集合是否为非空
isNotEmpty(Enumeration<?> enumeration) Enumeration是否为空
isNotEmpty(Iterable<?> iterable) Iterable是否为空
isNotEmpty(Iterator<?> Iterator) Iterator是否为空
isNotEmpty(Map map) Map是否为非空
join(Iterable iterable, CharSequence conjunction) 以 conjunction 为分隔符将集合转换为字符串
如果集合元素为数组、Iterable或Iterator,则递归组合其为字符串
join(Iterable iterable, CharSequence conjunction, Function<T,? extends CharSequence> func) 以 conjunction 为分隔符将集合转换为字符串
join(Iterable iterable, CharSequence conjunction, String prefix, String suffix) 以 conjunction 为分隔符将集合转换为字符串
join(Iterator iterator, CharSequence conjunction) Deprecated.
请使用IterUtil#join(Iterator, CharSequence)
keySet(Collection<Map<K,?>> mapCollection) 获取指定Map列表中所有的Key
lastIndexOf(Collection collection, Matcher matcher) 获取匹配规则定义中匹配到元素的最后位置
此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
list(boolean isLinked) 新建一个空List
list(boolean isLinked, Collection collection) 新建一个List
list(boolean isLinked, Enumeration enumeration) 新建一个List
提供的参数为null时返回空ArrayList
list(boolean isLinked, Iterable iterable) 新建一个List
提供的参数为null时返回空ArrayList
list(boolean isLinked, Iterator iter) 新建一个ArrayList
提供的参数为null时返回空ArrayList
list(boolean isLinked, T... values) 新建一个List
map(Iterable collection, Function<? super T,? extends R> func, boolean ignoreNull) 通过func自定义一个规则,此规则将原集合中的元素转换成新的元素,生成新的列表返回
例如提供的是一个Bean列表,通过Function接口实现获取某个字段值,返回这个字段值组成的新列表
max(Collection coll) 取最大值
min(Collection coll) 取最小值
newArrayList(Collection collection) 新建一个ArrayList
newArrayList(Enumeration enumeration) 新建一个ArrayList
提供的参数为null时返回空ArrayList
newArrayList(Iterable iterable) 新建一个ArrayList
提供的参数为null时返回空ArrayList
newArrayList(Iterator iterator) 新建一个ArrayList
提供的参数为null时返回空ArrayList
newArrayList(T... values) 新建一个ArrayList
newBlockingQueue(int capacity, boolean isLinked) 新建BlockingQueue
在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。
newCopyOnWriteArrayList(Collection collection) 新建一个CopyOnWriteArrayList
newHashSet(boolean isSorted, Collection collection) 新建一个HashSet
newHashSet(boolean isSorted, Enumeration enumeration) 新建一个HashSet
newHashSet(boolean isSorted, Iterator iter) 新建一个HashSet
newHashSet(Collection collection) 新建一个HashSet
newHashSet(T... ts) 新建一个HashSet
newLinkedHashSet(T... ts) 新建一个LinkedHashSet
newLinkedList(T... values) 新建LinkedList
padLeft(List list, int minLen, T padObj) 填充List,以达到最小长度
padRight(Collection list, int minLen, T padObj) 填充List,以达到最小长度
page(int pageNo, int pageSize, List list) 对指定List分页取值
popPart(Deque surplusAlaDatas, int partSize) 切取部分数据
切取后的栈将减少这些元素
popPart(Stack surplusAlaDatas, int partSize) 切取部分数据
切取后的栈将减少这些元素
removeAny(T collection, E... elesRemoved) 去掉集合中的多个元素,此方法直接修改原集合
removeBlank(T collection) 去除null或者""或者空白字符串 元素,此方法直接修改原集合
removeEmpty(T collection) 去除null或者"" 元素,此方法直接修改原集合
removeNull(T collection) 去除null 元素,此方法直接修改原集合
reverse(List list) 反序给定List,会在原List基础上直接修改
reverseNew(List list) 反序给定List,会创建一个新的List,原List数据不变
set(boolean isSorted, T... ts) 新建一个HashSet
setOrAppend(List list, int index, T element) 设置或增加元素。当index小于List的长度时,替换指定位置的值,否则在尾部追加
size(Object object) 获取Collection或者iterator的大小,此方法可以处理的对象类型如下: Collection - the collection size Map - the map size Array - the array size Iterator - the number of elements remaining in the iterator Enumeration - the number of elements remaining in the enumeration
sort(Collection collection, Comparator<? super T> comparator) 排序集合,排序不会修改原集合
sort(List list, Comparator<? super T> c) 针对List排序,排序会修改原List
sort(Map<K,V> map, Comparator<? super K> comparator) 排序Map
sortByEntry(Map<K,V> map, Comparator<Map.Entry<K,V>> comparator) 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序
sortByPinyin(Collection collection) 根据汉字的拼音顺序排序
sortByPinyin(List list) 根据汉字的拼音顺序排序
sortByProperty(Collection collection, String property) 根据Bean的属性排序
sortByProperty(List list, String property) 根据Bean的属性排序
sortEntryToList(Collection<Map.Entry<K,V>> collection) 将Set排序(根据Entry的值)
sortPageAll(int pageNo, int pageSize, Comparator comparator, Collection... colls) 将多个集合排序并显示不同的段落(分页)
采用BoundedPriorityQueue实现分页取局部
sortToMap(Collection<Map.Entry<K,V>> entryCollection, Comparator<Map.Entry<K,V>> comparator) 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序
split(Collection collection, int size) 对集合按照指定长度分段,每一个段为单独的集合,返回这个集合的列表
splitList(List list, int size) Deprecated.
请使用 ListUtil.partition(List, int)
sub(Collection collection, int start, int end) 截取集合的部分
sub(Collection collection, int start, int end, int step) 截取集合的部分
sub(List list, int start, int end) 截取列表的部分
sub(List list, int start, int end, int step) 截取列表的部分
subtract(Collection coll1, Collection coll2) 计算集合的单差集,即只返回【集合1】中有,但是【集合2】中没有的元素,例如:
subtractToList(Collection coll1, Collection coll2) 计算集合的单差集,即只返回【集合1】中有,但是【集合2】中没有的元素,例如:
toCollection(Iterable iterable) Iterable转为Collection
首先尝试强转,强转失败则构建一个新的ArrayList
toList(T... values) 数组转为ArrayList
toListMap(Iterable<? extends Map<K,V>> mapList) 行转列,合并相同的键,值合并为列表
将Map列表中相同key的值组成列表做为Map的value
是toMapList(Map)的逆方法
比如传入数据:
toMap(Iterable values, Map<K,V> map, Func1<E,K> keyFunc, Func1<E,V> valueFunc) 集合转换为Map,转换规则为:
按照keyFunc函数规则根据元素对象生成Key,按照valueFunc函数规则根据元素对象生成value组成新的Map
toMap(Iterable<Map.Entry<K,V>> entryIter) 将Entry集合转换为HashMap
toMap(Iterable values, Map<K,V> map, Func1<V,K> keyFunc) 集合转换为Map,转换规则为:
按照keyFunc函数规则根据元素对象生成Key,元素作为值
toMap(Object[] array) 将数组转换为Map(HashMap),支持数组元素类型为:
toMapList(Map<K,? extends Iterable> listMap) 列转行。将Map中值列表分别按照其位置与key组成新的map。
是toListMap(Iterable)的逆方法
比如传入数据:
toTreeSet(Collection collection, Comparator comparator) 将集合转换为排序后的TreeSet
trans(Collection collection, Function<? super F,? extends T> function) 使用给定的转换函数,转换源集合为新类型的集合
union(Collection coll1, Collection coll2) 两个集合的并集
针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最多的个数
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c, c, c],此结果中只保留了三个c
union(Collection coll1, Collection coll2, Collection... otherColls) 多个集合的并集
针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最多的个数
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c, c, c],此结果中只保留了三个c
unionAll(Collection coll1, Collection coll2, Collection... otherColls) 多个集合的完全并集,类似于SQL中的“UNION ALL”
针对一个集合中存在多个相同元素的情况,保留全部元素
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c, c, c, a, b, c, c]
unionDistinct(Collection coll1, Collection coll2, Collection... otherColls) 多个集合的非重复并集,类似于SQL中的“UNION DISTINCT”
针对一个集合中存在多个相同元素的情况,只保留一个
例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
结果:[a, b, c],此结果中只保留了一个c
unmodifiable(Collection<? extends T> c) 转为只读集合
values(Collection<Map<?,V>> mapCollection) 获取指定Map列表中所有的Value
valuesOfKeys(Map<K,V> map, Iterable keys) 从Map中获取指定键列表对应的值列表
如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null
valuesOfKeys(Map<K,V> map, Iterator keys) 从Map中获取指定键列表对应的值列表
如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null
valuesOfKeys(Map<K,V> map, K... keys) 从Map中获取指定键列表对应的值列表
如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null
zip(Collection keys, Collection values) 映射键值(参考Python的zip()函数)
例如:
keys = [a,b,c,d]
values = [1,2,3,4]
则得到的Map是 {a=1, b=2, c=3, d=4}
如果两个数组长度不同,则只对应最短部分
zip(String keys, String values, String delimiter) 映射键值(参考Python的zip()函数),返回Map无序
例如:
keys = a,b,c,d
values = 1,2,3,4
delimiter = , 则得到的Map是 {a=1, b=2, c=3, d=4}
如果两个数组长度不同,则只对应最短部分
zip(String keys, String values, String delimiter, boolean isOrder) 映射键值(参考Python的zip()函数)
例如:
keys = a,b,c,d
values = 1,2,3,4
delimiter = , 则得到的Map是 {a=1, b=2, c=3, d=4}
如果两个数组长度不同,则只对应最短部分

IterUtil

IterableIterator 相关工具类

方法 介绍
asIterable(Iterator iter) Iterator 转为 Iterable
asIterator(Enumeration e) Enumeration转换为Iterator
countMap(Iterator iter) 根据集合返回一个元素计数的 Map
所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
例如:[a,b,c,c,c] 得到:
a: 1
b: 1
c: 3
edit(Iterable iter, Editor editor) 编辑,此方法产生一个新ArrayList
编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
empty() 返回一个空Iterator
fieldValueAsMap(Iterator<?> iter, String fieldNameForKey, String fieldNameForValue) 两个字段值组成新的Map
fieldValueList(Iterable iterable, String fieldName) 获取指定Bean列表中某个字段,生成新的列表
fieldValueList(Iterator iter, String fieldName) 获取指定Bean列表中某个字段,生成新的列表
fieldValueMap(Iterator iter, String fieldName) 字段值与列表值对应的Map,常用于元素对象中有唯一ID时需要按照这个ID查找对象的情况
例如:车牌号 =》车
filter(Iterator iter, Filter filter) 过滤集合,此方法在原集合上直接修改
通过实现Filter接口,完成元素的过滤,这个Filter实现可以实现以下功能:
filter(T iter, Filter filter) 过滤集合,此方法在原集合上直接修改
通过实现Filter接口,完成元素的过滤,这个Filter实现可以实现以下功能:
firstMatch(Iterator iterator, Matcher matcher) 返回Iterator中第一个匹配规则的值
getElementType(Iterable<?> iterable) 获得Iterable对象的元素类型(通过第一个非空元素判断)
注意,此方法至少会调用多次next方法
getElementType(Iterator<?> iterator) 获得Iterator对象的元素类型(通过第一个非空元素判断)
注意,此方法至少会调用多次next方法
getFirst(Iterable iterable) 获取集合的第一个元素
getFirst(Iterator iterator) 获取集合的第一个元素
getFirstNoneNull(Iterable iterable) 获取集合的第一个非空元素
getFirstNoneNull(Iterator iterator) 获取集合的第一个非空元素
getIter(Iterable iterable) 获取Iterator
hasNull(Iterable<?> iter) 是否包含null元素
hasNull(Iterator<?> iter) 是否包含null元素
isAllNull(Iterable<?> iter) 是否全部元素为null
isAllNull(Iterator<?> iter) 是否全部元素为null
isEmpty(Iterable<?> iterable) Iterable是否为空
isEmpty(Iterator<?> Iterator) Iterator是否为空
isEqualList(Iterable list1, Iterable list2) 判断两个Iterable 是否元素和顺序相同,返回true的条件是: 两个Iterable必须长度相同 两个Iterable元素相同index的对象必须equals,满足Objects.equals(Object, Object) 此方法来自Apache-Commons-Collections4。
isNotEmpty(Iterable<?> iterable) Iterable是否为空
isNotEmpty(Iterator<?> Iterator) Iterator是否为空
join(Iterator iterator, CharSequence conjunction) 以 conjunction 为分隔符将集合转换为字符串
如果集合元素为数组、Iterable或Iterator,则递归组合其为字符串
join(Iterator iterator, CharSequence conjunction, Function<T,? extends CharSequence> func) 以 conjunction 为分隔符将集合转换为字符串
如果集合元素为数组、Iterable或Iterator,则递归组合其为字符串
join(Iterator iterator, CharSequence conjunction, String prefix, String suffix) 以 conjunction 为分隔符将集合转换为字符串
如果集合元素为数组、Iterable或Iterator,则递归组合其为字符串
size(Iterable<?> iterable) 返回 Iterable 对象的元素数量
size(Iterator<?> iterator) 返回 Iterator 对象的元素数量
toList(Iterable iter) Iterator转List
不判断,直接生成新的List
toList(Iterator iter) Iterator转List
不判断,直接生成新的List
toListMap(Iterable iterable, Function<T,K> keyMapper, Function<T,V> valueMapper) 将列表转成值为List的HashMap
toListMap(Iterable iterable, Function<V,K> keyMapper) 将列表转成值为List的HashMap
toListMap(Map<K,List> resultMap, Iterable iterable, Function<T,K> keyMapper, Function<T,V> valueMapper) 将列表转成值为List的HashMap
toMap(Iterable keys, Iterable values) 将键列表和值列表转换为Map
以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。
如果值多于键,忽略多余的值。
toMap(Iterable keys, Iterable values, boolean isOrder) 将键列表和值列表转换为Map
以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。
如果值多于键,忽略多余的值。
toMap(Iterable<Map.Entry<K,V>> entryIter) 将Entry集合转换为HashMap
toMap(Iterable iterable, Function<T,K> keyMapper, Function<T,V> valueMapper) 将列表转成HashMap
toMap(Iterable iterable, Function<V,K> keyMapper) 将列表转成HashMap
toMap(Iterator iterator, Map<K,V> map, Func1<E,K> keyFunc, Func1<E,V> valueFunc) 集合转换为Map,转换规则为:
按照keyFunc函数规则根据元素对象生成Key,按照valueFunc函数规则根据元素对象生成value组成新的Map
toMap(Iterator keys, Iterator values) 将键列表和值列表转换为Map
以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。
如果值多于键,忽略多余的值。
toMap(Iterator keys, Iterator values, boolean isOrder) 将键列表和值列表转换为Map
以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。
如果值多于键,忽略多余的值。
toMap(Iterator iterator, Map<K,V> map, Func1<V,K> keyFunc) Iterator转换为Map,转换规则为:
按照keyFunc函数规则根据元素对象生成Key,元素作为值
toMap(Map<K,V> resultMap, Iterable iterable, Function<T,K> keyMapper, Function<T,V> valueMapper) 将列表转成Map
trans(Iterator iterator, Function<? super F,? extends T> function) 按照给定函数,转换Iterator为另一种类型的Iterator

ListUtil

List相关工具类

方法 介绍
empty() 获取一个空List,这个空List不可变
indexOfAll(List list, Matcher matcher) 获取匹配规则定义中匹配到元素的所有位置
lastIndexOf(List list, Matcher matcher) 获取匹配规则定义中匹配到元素的最后位置
此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
list(boolean isLinked) 新建一个空List
list(boolean isLinked, Collection collection) 新建一个List
list(boolean isLinked, Enumeration enumration) 新建一个List
提供的参数为null时返回空ArrayList
list(boolean isLinked, Iterable iterable) 新建一个List
提供的参数为null时返回空ArrayList
list(boolean isLinked, Iterator iter) 新建一个List
提供的参数为null时返回空ArrayList
list(boolean isLinked, T... values) 新建一个List
of(T... ts) 数组转为一个不可变List
类似于Java9中的List.of
page(int pageNo, int pageSize, List list) 对指定List分页取值
page(List list, int pageSize, Consumer<List> pageListConsumer) 对指定List进行分页,逐页返回数据
partition(List list, int size) 通过传入分区长度,将指定列表分区为不同的块,每块区域的长度相同(最后一块可能小于长度)
分区是在原List的基础上进行的,返回的分区是不可变的抽象列表,原列表元素变更,分区中元素也会变更。
reverse(List list) 反序给定List,会在原List基础上直接修改
reverseNew(List list) 反序给定List,会创建一个新的List,原List数据不变
setOrAppend(List list, int index, T element) 设置或增加元素。当index小于List的长度时,替换指定位置的值,否则在尾部追加
sort(List list, Comparator<? super T> c) 针对List排序,排序会修改原List
sortByPinyin(List list) 根据汉字的拼音顺序排序
sortByProperty(List list, String property) 根据Bean的属性排序
split(List list, int size) 对集合按照指定长度分段,每一个段为单独的集合,返回这个集合的列表
splitAvg(List list, int limit) 将集合平均分成多个list,返回这个集合的列表
sub(List list, int start, int end) 截取集合的部分
sub(List list, int start, int end, int step) 截取集合的部分
此方法与List.subList(int, int) 不同在于子列表是新的副本,操作子列表不会影响原列表。
swapElement(List list, T element, T targetElement) 将指定元素交换到指定元素位置,其他元素的索引值不变
交换会修改原List
如果集合中有多个相同元素,只交换第一个找到的元素
swapTo(List list, T element, Integer targetIndex) 将指定元素交换到指定索引位置,其他元素的索引值不变
交换会修改原List
如果集合中有多个相同元素,只交换第一个找到的元素
toCopyOnWriteArrayList(Collection collection) 新建一个CopyOnWriteArrayList
toLinkedList(T... values) 新建LinkedList
toList(Collection collection) 新建一个ArrayList
toList(Enumeration enumeration) 新建一个ArrayList
提供的参数为null时返回空ArrayList
toList(Iterable iterable) 新建一个ArrayList
提供的参数为null时返回空ArrayList
toList(Iterator iterator) 新建一个ArrayList
提供的参数为null时返回空ArrayList
toList(T... values) 新建一个ArrayList
unmodifiable(List list) 将对应List转换为不可修改的List

RingIndexUtil

集合索引环形获取工具类

方法 介绍
ringNextInt(int modulo, AtomicInteger atomicInteger) 通过cas操作 实现对指定值内的回环累加
ringNextIntByObj(Object object, AtomicInteger atomicInteger) 通过cas操作 实现对指定值内的回环累加
ringNextLong(long modulo, AtomicLong atomicLong) 通过cas操作 实现对指定值内的回环累加

SpliteratorUtil

Spliterator相关工具类

方法 介绍
trans(Spliterator fromSpliterator, Function<? super F,? extends T> function) 使用给定的转换函数,转换源Spliterator为新类型的Spliterator

CompareUtil

Bean字段排序器

参阅feilong-core中的PropertyComparator

方法 介绍
compare(T c1, T c2) null安全的对象比较,null对象小于任何对象
compare(T o1, T o2, boolean isNullGreater) 自然比较两个对象的大小,比较规则如下:
compare(T c1, T c2, boolean isNullGreater) null安全的对象比较
compare(T c1, T c2, Comparator comparator) 对象比较,比较结果取决于comparator,如果被比较对象为null,传入的comparator对象应处理此情况
如果传入comparator为null,则使用默认规则比较(此时被比较对象必须实现Comparable接口)
comparingPinyin(Function<T,String> keyExtractor) 中文比较器
comparingPinyin(Function<T,String> keyExtractor, boolean reverse) 中文比较器

CompilerUtil

源码编译工具类,主要封装JavaCompiler 相关功能

方法 介绍
compile(String... sourceFiles) 编译指定的源码文件
getCompiler(ClassLoader parent) 获取JavaSourceCompiler
getFileManager() 获取StandardJavaFileManager
getFileManager(DiagnosticListener<? super JavaFileObject> diagnosticListener) 获取StandardJavaFileManager
getTask(JavaFileManager fileManager, DiagnosticListener<? super JavaFileObject> diagnosticListener, Iterable options, Iterable<? extends JavaFileObject> compilationUnits) 新建编译任务

DiagnosticUtil

诊断工具类

方法 介绍
getMessages(DiagnosticCollector<?> collector) 获取DiagnosticCollector收集到的诊断信息,以文本返回

JavaFileObjectUtil

JavaFileObject 相关工具类封装

方法 介绍
getJavaFileObjects(File file) 获取指定文件下的所有待编译的java文件,并以JavaFileObject形式返回
isJarOrZipFile(String fileName) 是否是jar 或 zip 文件
isJavaFile(String fileName) 是否是java文件

CalendarUtil

针对Calendar 对象封装工具类

方法 介绍
age(Calendar birthday, Calendar dateToCompare) 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
age(long birthday, long dateToCompare) 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
beginOfDay(Calendar calendar) 获取某天的开始时间
beginOfHour(Calendar calendar) 获取某小时的开始时间
beginOfMinute(Calendar calendar) 获取某分钟的开始时间
beginOfMonth(Calendar calendar) 获取某月的开始时间
beginOfQuarter(Calendar calendar) 获取某季度的开始时间
beginOfSecond(Calendar calendar) 获取秒级别的开始时间,即忽略毫秒部分
beginOfWeek(Calendar calendar) 获取给定日期当前周的开始时间,周一定为一周的开始时间
beginOfWeek(Calendar calendar, boolean isMondayAsFirstDay) 获取给定日期当前周的开始时间
beginOfYear(Calendar calendar) 获取某年的开始时间
calendar() 创建Calendar对象,时间为默认时区的当前时间
calendar(Date date) 转换为Calendar对象
calendar(long millis) 转换为Calendar对象
ceiling(Calendar calendar, DateField dateField) 修改日期为某个时间字段结束时间
ceiling(Calendar calendar, DateField dateField, boolean truncateMillisecond) 修改日期为某个时间字段结束时间
可选是否归零毫秒。
compare(Calendar calendar1, Calendar calendar2) null安全的Calendar比较,null小于任何日期
endOfDay(Calendar calendar) 获取某天的结束时间
endOfHour(Calendar calendar) 获取某小时的结束时间
endOfMinute(Calendar calendar) 获取某分钟的结束时间
endOfMonth(Calendar calendar) 获取某月的结束时间
endOfQuarter(Calendar calendar) 获取某季度的结束时间
endOfSecond(Calendar calendar) 获取秒级别的结束时间,即毫秒设置为999
endOfWeek(Calendar calendar) 获取某周的结束时间,周日定为一周的结束
endOfWeek(Calendar calendar, boolean isSundayAsLastDay) 获取某周的结束时间
endOfYear(Calendar calendar) 获取某年的结束时间
formatChineseDate(Calendar calendar, boolean withTime) 将指定Calendar时间格式化为纯中文形式,比如:
getBeginValue(Calendar calendar, DateField dateField) 获取指定日期字段的最小值,例如分钟的最小值是0
getBeginValue(Calendar calendar, int dateField) 获取指定日期字段的最小值,例如分钟的最小值是0
getEndValue(Calendar calendar, DateField dateField) 获取指定日期字段的最大值,例如分钟的最大值是59
getEndValue(Calendar calendar, int dateField) 获取指定日期字段的最大值,例如分钟的最大值是59
isAM(Calendar calendar) 是否为上午
isPM(Calendar calendar) 是否为下午
isSameDay(Calendar cal1, Calendar cal2) 比较两个日期是否为同一天
isSameInstant(Calendar date1, Calendar date2) 检查两个Calendar时间戳是否相同。
isSameMonth(Calendar cal1, Calendar cal2) 比较两个日期是否为同一月
parse(CharSequence str, boolean lenient, DateParser parser) 使用指定DateParser解析字符串为Calendar
parseByPatterns(String str, Locale locale, boolean lenient, String... parsePatterns) 通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
parseByPatterns(String str, Locale locale, String... parsePatterns) 通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
parseByPatterns(String str, String... parsePatterns) 通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
round(Calendar calendar, DateField dateField) 修改日期为某个时间字段四舍五入时间
toInstant(Calendar calendar) CalendarInstant对象
toLocalDateTime(Calendar calendar) Calendar 转换为 LocalDateTime,使用系统默认时区
truncate(Calendar calendar, DateField dateField) 修改日期为某个时间字段起始时间
yearAndQuarter(Calendar cal) 获得指定日期年份和季度
格式:[20131]表示2013年第一季度
yearAndQuarter(long startDate, long endDate) 获得指定日期区间内的年份和季度

DateUtil

时间工具类

方法 介绍
age(Date birthday, Date dateToCompare) 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
ageOfNow(Date birthDay) 生日转为年龄,计算法定年龄
ageOfNow(String birthDay) 生日转为年龄,计算法定年龄
beginOfDay(Date date) 获取某天的开始时间
beginOfHour(Date date) 获取某小时的开始时间
beginOfMinute(Date date) 获取某分钟的开始时间
beginOfMonth(Date date) 获取某月的开始时间
beginOfQuarter(Date date) 获取某季度的开始时间
beginOfSecond(Date date) 获取秒级别的开始时间,即毫秒部分设置为0
beginOfWeek(Date date) 获取某周的开始时间,周一定为一周的开始时间
beginOfWeek(Date date, boolean isMondayAsFirstDay) 获取某周的开始时间
beginOfYear(Date date) 获取某年的开始时间
between(Date beginDate, Date endDate, DateUnit unit) 判断两个日期相差的时长,只保留绝对值
between(Date beginDate, Date endDate, DateUnit unit, boolean isAbs) 判断两个日期相差的时长
betweenDay(Date beginDate, Date endDate, boolean isReset) 判断两个日期相差的天数
betweenMonth(Date beginDate, Date endDate, boolean isReset) 计算两个日期相差月数
在非重置情况下,如果起始日期的天大于结束日期的天,月数要少算1(不足1个月)
betweenMs(Date beginDate, Date endDate) 判断两个日期相差的毫秒数
betweenWeek(Date beginDate, Date endDate, boolean isReset) 计算指定时间区间内的周数
betweenYear(Date beginDate, Date endDate, boolean isReset) 计算两个日期相差年数
在非重置情况下,如果起始日期的月大于结束日期的月,年数要少算1(不足1年)
ceiling(Date date, DateField dateField) 修改日期为某个时间字段结束时间
ceiling(Date date, DateField dateField, boolean truncateMillisecond) 修改日期为某个时间字段结束时间
可选是否归零毫秒。
compare(Date date1, Date date2) null安全的日期比较,null对象排在末尾
compare(Date date1, Date date2, String format) null安全的日期比较,并只比较指定格式; null对象排在末尾, 并指定日期格式;
createStopWatch() 创建秒表StopWatch,用于对代码块的执行时间计数
createStopWatch(String id) 创建秒表StopWatch,用于对代码块的执行时间计数
current() 当前时间的时间戳
currentSeconds() 当前时间的时间戳(秒)
date() 当前时间,转换为DateTime对象
date(Calendar calendar) Calendar类型时间转为DateTime
始终根据已有Calendar 产生新的DateTime对象
date(Date date) Date类型时间转为DateTime
如果date本身为DateTime对象,则返回强转后的对象,否则新建一个DateTime对象
date(long date) Long类型时间转为DateTime
只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000
date(TemporalAccessor temporalAccessor) TemporalAccessor类型时间转为DateTime
始终根据已有TemporalAccessor 产生新的DateTime对象
dateNew(Date date) 根据已有Date 产生新的DateTime对象
dateSecond() 当前时间,转换为DateTime对象,忽略毫秒部分
dayOfMonth(Date date) 获得指定日期是这个日期所在月份的第几天
dayOfWeek(Date date) 获得指定日期是星期几,1表示周日,2表示周一
dayOfWeekEnum(Date date) 获得指定日期是星期几
dayOfYear(Date date) 获得指定日期是这个日期所在年的第几天
endOfDay(Date date) 获取某天的结束时间
endOfHour(Date date) 获取某小时的结束时间
endOfMinute(Date date) 获取某分钟的结束时间
endOfMonth(Date date) 获取某月的结束时间
endOfQuarter(Date date) 获取某季度的结束时间
endOfSecond(Date date) 获取秒级别的结束时间,即毫秒设置为999
endOfWeek(Date date) 获取某周的结束时间,周日定为一周的结束
endOfWeek(Date date, boolean isSundayAsLastDay) 获取某周的结束时间
endOfYear(Date date) 获取某年的结束时间
format(Date date, DateFormat format) 根据特定格式格式化日期
format(Date date, DatePrinter format) 根据特定格式格式化日期
format(Date date, DateTimeFormatter format) 根据特定格式格式化日期
format(Date date, String format) 根据特定格式格式化日期
format(LocalDateTime localDateTime, String format) 根据特定格式格式化日期
formatBetween(Date beginDate, Date endDate) 格式化日期间隔输出,精确到毫秒
formatBetween(Date beginDate, Date endDate, BetweenFormatter.Level level) 格式化日期间隔输出
formatBetween(long betweenMs) 格式化日期间隔输出,精确到毫秒
formatBetween(long betweenMs, BetweenFormatter.Level level) 格式化日期间隔输出
formatChineseDate(Date date, boolean isUppercase, boolean withTime) 格式化为中文日期格式,如果isUppercase为false,则返回类似:2018年10月24日,否则返回二〇一八年十月二十四日
formatDate(Date date) 格式化日期部分(不包括时间)
格式 yyyy-MM-dd
formatDateTime(Date date) 格式化日期时间
格式 yyyy-MM-dd HH:mm:ss
formatHttpDate(Date date) 格式化为Http的标准日期格式
标准日期格式遵循RFC 1123规范,格式类似于:Fri, 31 Dec 1999 23:59:59 GMT
formatLocalDateTime(LocalDateTime localDateTime) 格式化日期时间
格式 yyyy-MM-dd HH:mm:ss
formatTime(Date date) 格式化时间
格式 HH:mm:ss
getChineseZodiac(int year) 计算生肖,只计算1900年后出生的人
getZodiac(int month, int day) 通过生日计算星座
hour(Date date, boolean is24HourClock) 获得指定日期的小时数部分
isAM(Date date) 是否为上午
isExpired(Date startDate, Date endDate, Date checkDate) Deprecated.
使用isIn方法
isExpired(Date startDate, DateField dateField, int timeLength, Date endDate) Deprecated.
此方法存在一定的歧义,容易产生误导,废弃。
isIn(Date date, Date beginDate, Date endDate) 当前日期是否在日期指定范围内
起始日期和结束日期可以互换
isLeapYear(int year) 是否闰年
isPM(Date date) 是否为下午
isSameDay(Date date1, Date date2) 比较两个日期是否为同一天
isSameMonth(Date date1, Date date2) 比较两个日期是否为同一月
isSameTime(Date date1, Date date2) 是否为相同时间
此方法比较两个日期的时间戳是否相同
isWeekend(Date date) 是否为周末(周六或周日)
lastMonth() 上个月
lastWeek() 上周
lengthOfMonth(int month, boolean isLeapYear) 获得指定月份的总天数
lengthOfYear(int year) 获得指定年份的总天数
millisecond(Date date) 获得指定日期的毫秒数部分
minute(Date date) 获得指定日期的分钟数部分
例如:10:04:15.250 =》 4
month(Date date) 获得月份,从0开始计数
monthEnum(Date date) 获得月份
nanosToMillis(long duration) 纳秒转毫秒
nanosToSeconds(long duration) 纳秒转秒,保留小数
newSimpleFormat(String pattern) 创建SimpleDateFormat,注意此对象非线程安全!
此对象默认为严格格式模式,即parse时如果格式不正确会报错。
newSimpleFormat(String pattern, Locale locale, TimeZone timeZone) 创建SimpleDateFormat,注意此对象非线程安全!
此对象默认为严格格式模式,即parse时如果格式不正确会报错。
nextMonth() 下个月
nextWeek() 下周
now() 当前时间,格式 yyyy-MM-dd HH:mm:ss
offset(Date date, DateField dateField, int offset) 获取指定日期偏移指定时间后的时间,生成的偏移日期不影响原日期
offsetDay(Date date, int offset) 偏移天
offsetHour(Date date, int offset) 偏移小时
offsetMillisecond(Date date, int offset) 偏移毫秒数
offsetMinute(Date date, int offset) 偏移分钟
offsetMonth(Date date, int offset) 偏移月
offsetSecond(Date date, int offset) 偏移秒数
offsetWeek(Date date, int offset) 偏移周
parse(CharSequence dateCharSequence) 将日期字符串转换为DateTime对象,格式:
yyyy-MM-dd HH:mm:ss yyyy/MM/dd HH:mm:ss yyyy.MM.dd HH:mm:ss yyyy年MM月dd日 HH时mm分ss秒 yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd HH:mm:ss HH时mm分ss秒 yyyy-MM-dd HH:mm yyyy-MM-dd HH:mm:ss.SSS yyyy-MM-dd HH:mm:ss.SSSSSS yyyyMMddHHmmss yyyyMMddHHmmssSSS yyyyMMdd EEE, dd MMM yyyy HH:mm:ss z EEE MMM dd HH:mm:ss zzz yyyy yyyy-MM-dd'T'HH:mm:ss'Z' yyyy-MM-dd'T'HH:mm:ss.SSS'Z' yyyy-MM-dd'T'HH:mm:ssZ yyyy-MM-dd'T'HH:mm:ss.SSSZ
parse(CharSequence dateStr, DateFormat dateFormat) 构建DateTime对象
parse(CharSequence dateStr, DateParser parser) 构建DateTime对象
parse(CharSequence dateStr, DateParser parser, boolean lenient) 构建DateTime对象
parse(CharSequence dateStr, DateTimeFormatter formatter) 构建DateTime对象
parse(CharSequence dateStr, String format) 将特定格式的日期转换为Date对象
parse(CharSequence dateStr, String format, Locale locale) 将特定格式的日期转换为Date对象
parse(String str, String... parsePatterns) 通过给定的日期格式解析日期时间字符串。
传入的日期格式会逐个尝试,直到解析成功,返回DateTime对象,否则抛出DateException异常。
parseCST(CharSequence cstString) 解析CST时间,格式:
EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2012)
parseDate(CharSequence dateString) 解析日期字符串,忽略时分秒,支持的格式包括:
parseDateTime(CharSequence dateString) 解析日期时间字符串,格式支持:
parseLocalDateTime(CharSequence dateStr) 构建LocalDateTime对象
格式:yyyy-MM-dd HH:mm:ss
parseLocalDateTime(CharSequence dateStr, String format) 构建LocalDateTime对象
parseTime(CharSequence timeString) 解析时间,格式HH:mm:ss,日期部分默认为1970-01-01
parseTimeToday(CharSequence timeString) 解析时间,格式HH:mm 或 HH:mm:ss,日期默认为今天
parseUTC(String utcString) 解析UTC时间,格式:
yyyy-MM-dd'T'HH:mm:ss'Z' yyyy-MM-dd'T'HH:mm:ss.SSS'Z' yyyy-MM-dd'T'HH:mm:ssZ yyyy-MM-dd'T'HH:mm:ss.SSSZ yyyy-MM-dd'T'HH:mm:ss+0800 yyyy-MM-dd'T'HH:mm:ss+08:00
quarter(Date date) 获得指定日期所属季度,从1开始计数
quarterEnum(Date date) 获得指定日期所属季度
range(Date start, Date end, DateField unit) 创建日期范围生成器
rangeToList(Date start, Date end, DateField unit) 创建日期范围生成器
round(Date date, DateField dateField) 修改日期为某个时间字段四舍五入时间
second(Date date) 获得指定日期的秒数部分
secondToTime(int seconds) 秒数转为时间格式(HH:mm:ss)
参考:https://github.com/iceroot
spendMs(long preTime) 计时,常用于记录某段代码的执行时间,单位:毫秒
spendNt(long preTime) 计时,常用于记录某段代码的执行时间,单位:纳秒
thisDayOfMonth()
thisDayOfWeek()
thisDayOfWeekEnum()
thisHour(boolean is24HourClock)
thisMillisecond()
thisMinute()
thisMonth()
thisMonthEnum()
thisSecond()
thisWeekOfMonth()
thisWeekOfYear()
thisYear()
timer() 计时器
计算某个过程花费的时间,精确到毫秒
timer(boolean isNano) 计时器
计算某个过程花费的时间,精确到毫秒
timeToSecond(String timeStr) HH:mm:ss 时间格式字符串转为秒数
参考:https://github.com/iceroot
today() 当前日期,格式 yyyy-MM-dd
toInstant(Date date) Date对象转换为Instant对象
toInstant(TemporalAccessor temporalAccessor) Date对象转换为Instant对象
toIntSecond(Date date) 格式化成yyMMddHHmm后转换为int型
toLocalDateTime(Date date) Date 转换为 LocalDateTime,使用系统默认时区
toLocalDateTime(Instant instant) Instant 转换为 LocalDateTime,使用系统默认时区
tomorrow() 明天
truncate(Date date, DateField dateField) 修改日期为某个时间字段起始时间
weekOfMonth(Date date) 获得指定日期是所在月份的第几周
weekOfYear(Date date) 获得指定日期是所在年份的第几周
此方法返回值与一周的第一天有关,比如:
2016年1月3日为周日,如果一周的第一天为周日,那这天是第二周(返回2)
如果一周的第一天为周一,那这天是第一周(返回1)
跨年的那个星期得到的结果总是1
year(Date date) 获得年的部分
yearAndQuarter(Date date) 获得指定日期年份和季节
格式:[20131]表示2013年第一季度
yearAndQuarter(Date startDate, Date endDate) 获得指定日期区间内的年份和季节
yesterday() 昨天

LocalDateTimeUtil

JDK8+中的LocalDateTime 工具类封装

方法 介绍
beginOfDay(LocalDateTime time) 修改为一天的开始时间,例如:2020-02-02 00:00:00,000
between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude) 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。
between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude, ChronoUnit unit) 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。
betweenPeriod(LocalDate startTimeInclude, LocalDate endTimeExclude) 获取两个日期的表象时间差,如果结束时间早于开始时间,获取结果为负。
dayOfWeek(LocalDate localDate) 获取LocalDate对应的星期值
endOfDay(LocalDateTime time) 修改为一天的结束时间,例如:2020-02-02 23:59:59,999
format(LocalDate date, DateTimeFormatter formatter) 格式化日期时间为指定格式
format(LocalDate date, String format) 格式化日期时间为指定格式
format(LocalDateTime time, DateTimeFormatter formatter) 格式化日期时间为指定格式
format(LocalDateTime time, String format) 格式化日期时间为指定格式
formatNormal(LocalDate date) 格式化日期时间为yyyy-MM-dd格式
formatNormal(LocalDateTime time) 格式化日期时间为yyyy-MM-dd HH:mm:ss格式
isWeekend(LocalDate localDate) 是否为周末(周六或周日)
isWeekend(LocalDateTime localDateTime) 是否为周末(周六或周日)
now() 当前时间,默认时区
of(Date date) Date转LocalDateTime,使用默认时区
of(Instant instant) Instant转LocalDateTime,使用默认时区
of(Instant instant, TimeZone timeZone) Instant转LocalDateTime
of(Instant instant, ZoneId zoneId) Instant转LocalDateTime
of(long epochMilli) 毫秒转LocalDateTime,使用默认时区
of(long epochMilli, TimeZone timeZone) 毫秒转LocalDateTime,结果会产生时间偏移
of(long epochMilli, ZoneId zoneId) 毫秒转LocalDateTime,根据时区不同,结果会产生时间偏移
of(TemporalAccessor temporalAccessor) TemporalAccessor转LocalDateTime,使用默认时区
of(ZonedDateTime zonedDateTime) ZonedDateTime转LocalDateTime
ofDate(TemporalAccessor temporalAccessor) TemporalAccessor转LocalDate,使用默认时区
offset(LocalDateTime time, long number, TemporalUnit field) 日期偏移,根据field不同加不同值(偏移会修改传入的对象)
ofUTC(Instant instant) Instant转LocalDateTime,使用UTC时区
ofUTC(long epochMilli) 毫秒转LocalDateTime,使用UTC时区
parse(CharSequence text) 解析日期时间字符串为LocalDateTime,仅支持yyyy-MM-dd'T'HH:mm:ss格式,例如:2007-12-03T10:15:30
即DateTimeFormatter.ISO_LOCAL_DATE_TIME
parse(CharSequence text, DateTimeFormatter formatter) 解析日期时间字符串为LocalDateTime,格式支持日期时间、日期、时间
如果formatter为{code null},则使用DateTimeFormatter.ISO_LOCAL_DATE_TIME
parse(CharSequence text, String format) 解析日期时间字符串为LocalDateTime
parseDate(CharSequence text) 解析日期时间字符串为LocalDate,仅支持yyyy-MM-dd'T'HH:mm:ss格式,例如:2007-12-03T10:15:30
parseDate(CharSequence text, DateTimeFormatter formatter) 解析日期时间字符串为LocalDate,格式支持日期
parseDate(CharSequence text, String format) 解析日期字符串为LocalDate
toEpochMilli(TemporalAccessor temporalAccessor) TemporalAccessor转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)

TemporalAccessorUtil

TemporalAccessor 工具类封装

方法 介绍
format(TemporalAccessor time, DateTimeFormatter formatter) 格式化日期时间为指定格式
format(TemporalAccessor time, String format) 格式化日期时间为指定格式
get(TemporalAccessor temporalAccessor, TemporalField field) 安全获取时间的某个属性,属性不存在返回0
toEpochMilli(TemporalAccessor temporalAccessor) TemporalAccessor转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)
toInstant(TemporalAccessor temporalAccessor) TemporalAccessor转换为 Instant对象

TemporalUtil

Temporal 工具类封装

方法 介绍
between(Temporal startTimeInclude, Temporal endTimeExclude) 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。
between(Temporal startTimeInclude, Temporal endTimeExclude, ChronoUnit unit) 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

ZoneUtil

ZoneIdTimeZone相关封装

方法 介绍
toTimeZone(ZoneId zoneId) ZoneId转换为TimeZone,null则返回系统默认值
toZoneId(TimeZone timeZone) TimeZone转换为ZoneId,null则返回系统默认值

ExceptionUtil

异常工具类

方法 介绍
convertFromOrSuppressedThrowable(Throwable throwable, Class exceptionClass) 转化指定异常为来自或者包含指定异常
convertFromOrSuppressedThrowable(Throwable throwable, Class exceptionClass, boolean checkCause) 转化指定异常为来自或者包含指定异常
getCausedBy(Throwable throwable, Class<? extends Exception>... causeClasses) 获取由指定异常类引起的异常
getMessage(Throwable e) 获得完整消息,包括异常名,消息格式为:{SimpleClassName}: {ThrowableMessage}
getRootCause(Throwable throwable) 获取异常链中最尾端的异常,即异常最早发生的异常对象。
此方法通过调用Throwable.getCause() 直到没有cause为止,如果异常本身没有cause,返回异常本身
传入null返回也为null
getRootCauseMessage(Throwable th) 获取异常链中最尾端的异常的消息,消息格式为:{SimpleClassName}: {ThrowableMessage}
getRootStackElement() 获取入口堆栈信息
getSimpleMessage(Throwable e) 获得消息,调用异常类的getMessage方法
getStackElement(int i) 获取指定层的堆栈信息
getStackElement(String fqcn, int i) 获取指定层的堆栈信息
getStackElements() 获取当前栈信息
getThrowableList(Throwable throwable) 获取异常链上所有异常的集合,如果Throwable 对象没有cause,返回只有一个节点的List
如果传入null,返回空集合
isCausedBy(Throwable throwable, Class<? extends Exception>... causeClasses) 判断是否由指定异常类引起
isFromOrSuppressedThrowable(Throwable throwable, Class<? extends Throwable> exceptionClass) 判断指定异常是否来自或者包含指定异常
isFromOrSuppressedThrowable(Throwable throwable, Class<? extends Throwable> exceptionClass, boolean checkCause) 判断指定异常是否来自或者包含指定异常
stacktraceToOneLineString(Throwable throwable) 堆栈转为单行完整字符串
stacktraceToOneLineString(Throwable throwable, int limit) 堆栈转为单行完整字符串
stacktraceToString(Throwable throwable) 堆栈转为完整字符串
stacktraceToString(Throwable throwable, int limit) 堆栈转为完整字符串
stacktraceToString(Throwable throwable, int limit, Map<Character,String> replaceCharToStrMap) 堆栈转为完整字符串
unwrap(Throwable wrapped) 剥离反射引发的InvocationTargetException、UndeclaredThrowableException中间异常,返回业务本身的异常
wrap(Throwable throwable, Class wrapThrowable) 包装一个异常
wrapAndThrow(Throwable throwable) 包装异常并重新抛出此异常
RuntimeException 和Error 直接抛出,其它检查异常包装为UndeclaredThrowableException 后抛出
wrapRuntime(String message) 将指定的消息包装为运行时异常
wrapRuntime(Throwable throwable) 使用运行时异常包装编译异常
wrapRuntimeAndThrow(String message) 将消息包装为运行时异常并抛出

FontUtil

AWT中字体相关工具类

方法 介绍
createFont() 创建默认字体
createFont(File fontFile) 根据文件创建字体
首先尝试创建Font.TRUETYPE_FONT字体,此类字体无效则创建Font.TYPE1_FONT
createFont(InputStream fontStream) 根据文件创建字体
首先尝试创建Font.TRUETYPE_FONT字体,此类字体无效则创建Font.TYPE1_FONT
createFont(String name, int size) 创建指定名称的字体
createSansSerifFont(int size) 创建SansSerif字体
getDimension(FontMetrics metrics, String str) 获得字体对应字符串的长宽信息

GraphicsUtil

Graphics相关工具类

方法 介绍
createGraphics(BufferedImage image, Color color) 创建Graphics2D
drawImg(Graphics g, Image img, Point point) 绘制图片
drawImg(Graphics g, Image img, Rectangle rectangle) 绘制图片
drawString(Graphics g, String str, Font font, Color color, int width, int height) 绘制字符串,默认抗锯齿
drawString(Graphics g, String str, Font font, Color color, Point point) 绘制字符串,默认抗锯齿
drawString(Graphics g, String str, Font font, Color color, Rectangle rectangle) 绘制字符串,默认抗锯齿。
此方法定义一个矩形区域和坐标,文字基于这个区域中间偏移x,y绘制。
drawStringColourful(Graphics g, String str, Font font, int width, int height) 绘制字符串,使用随机颜色,默认抗锯齿
getCenterY(Graphics g, int backgroundHeight) 获取文字居中高度的Y坐标(距离上边距距离)
此方法依赖FontMetrics,如果获取失败,默认为背景高度的1/3
setAlpha(Graphics2D g, float alpha) 设置画笔透明度

ImgUtil

图片处理工具类:

功能:缩放图像、切割图像、旋转、图像类型转换、彩色转黑白、文字水印、图片水印等

参考:http://blog.csdn.net/zhangzhikaixinya/article/details/8459400

方法 介绍
backgroundRemoval(BufferedImage bufferedImage, Color override, int tolerance) 背景移除 图片去底工具 将 "纯色背景的图片" 还原成 "透明背景的图片" 将纯色背景的图片转成矢量图 取图片边缘的像素点和获取到的图片主题色作为要替换的背景色 再加入一定的容差值,然后将所有像素点与该颜色进行比较 发现相同则将颜色不透明度设置为0,使颜色完全透明.
backgroundRemoval(ByteArrayOutputStream outputStream, Color override, int tolerance) 背景移除 图片去底工具 将 "纯色背景的图片" 还原成 "透明背景的图片" 将纯色背景的图片转成矢量图 取图片边缘的像素点和获取到的图片主题色作为要替换的背景色 再加入一定的容差值,然后将所有像素点与该颜色进行比较 发现相同则将颜色不透明度设置为0,使颜色完全透明.
backgroundRemoval(File input, File output, Color override, int tolerance) 背景移除 图片去底工具 将 "纯色背景的图片" 还原成 "透明背景的图片" 将纯色背景的图片转成矢量图 取图片边缘的像素点和获取到的图片主题色作为要替换的背景色 再加入一定的容差值,然后将所有像素点与该颜色进行比较 发现相同则将颜色不透明度设置为0,使颜色完全透明.
backgroundRemoval(File input, File output, int tolerance) 背景移除 图片去底工具 将 "纯色背景的图片" 还原成 "透明背景的图片" 将纯色背景的图片转成矢量图 取图片边缘的像素点和获取到的图片主题色作为要替换的背景色 再加入一定的容差值,然后将所有像素点与该颜色进行比较 发现相同则将颜色不透明度设置为0,使颜色完全透明.
backgroundRemoval(String inputPath, String outputPath, int tolerance) 背景移除 图片去底工具 将 "纯色背景的图片" 还原成 "透明背景的图片" 将纯色背景的图片转成矢量图 取图片边缘的像素点和获取到的图片主题色作为要替换的背景色 再加入一定的容差值,然后将所有像素点与该颜色进行比较 发现相同则将颜色不透明度设置为0,使颜色完全透明.
binary(File srcImageFile, File destImageFile) 彩色转为黑白二值化图片,根据目标文件扩展名确定转换后的格式
binary(Image srcImage) 彩色转为黑白二值化图片
binary(Image srcImage, File outFile) 彩色转为黑白二值化图片,根据目标文件扩展名确定转换后的格式
binary(Image srcImage, ImageOutputStream destImageStream, String imageType) 彩色转为黑白二值化图片
此方法并不关闭流,输出JPG格式
binary(ImageInputStream srcStream, ImageOutputStream destStream, String imageType) 彩色转为黑白黑白二值化图片
此方法并不关闭流
binary(Image srcImage, OutputStream out, String imageType) 彩色转为黑白二值化图片
此方法并不关闭流,输出JPG格式
binary(InputStream srcStream, OutputStream destStream, String imageType) 彩色转为黑白二值化图片
此方法并不关闭流
colorConvert(ColorSpace colorSpace, BufferedImage image) 图片颜色转换
可以使用灰度 (gray)等
compress(File imageFile, File outFile, float quality) 压缩图像,输出图像只支持jpg文件
convert(File srcImageFile, File destImageFile) 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
convert(Image srcImage, String formatName, ImageOutputStream destImageStream, boolean isSrcPng) 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
此方法并不关闭流
convert(InputStream srcStream, String formatName, OutputStream destStream) 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
此方法并不关闭流
copyImage(Image img, int imageType) 将已有Image复制新的一份出来
copyImage(Image img, int imageType, Color backgroundColor) 将已有Image复制新的一份出来
createCompatibleImage(int width, int height, int transparency) 创建与当前设备颜色模式兼容的 BufferedImage
createFont(File fontFile) 根据文件创建字体
首先尝试创建Font.TRUETYPE_FONT字体,此类字体无效则创建Font.TYPE1_FONT
createFont(InputStream fontStream) 根据文件创建字体
首先尝试创建Font.TRUETYPE_FONT字体,此类字体无效则创建Font.TYPE1_FONT
createGraphics(BufferedImage image, Color color) 创建Graphics2D
createImage(String str, Font font, Color backgroundColor, Color fontColor, ImageOutputStream out) 根据文字创建PNG图片
createImage(String str, Font font, Color backgroundColor, Color fontColor, int imageType) 根据文字创建图片
cut(File srcImgFile, File destImgFile, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割)
cut(Image srcImage, File destFile, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流
cut(Image srcImage, ImageOutputStream destImageStream, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流
cut(ImageInputStream srcStream, ImageOutputStream destStream, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流
cut(Image srcImage, int x, int y) 图像切割(按指定起点坐标和宽高切割),填充满整个图片(直径取长宽最小值)
cut(Image srcImage, int x, int y, int radius) 图像切割(按指定起点坐标和宽高切割)
cut(Image srcImage, OutputStream out, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流
cut(Image srcImage, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割)
cut(InputStream srcStream, OutputStream destStream, Rectangle rectangle) 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流
filter(BufferedImageOp op, BufferedImage image) 图片过滤转换
filter(ImageFilter filter, Image image) 图片滤镜,借助 ImageFilter实现,实现不同的图片滤镜
flip(File imageFile, File outFile) 水平翻转图像
flip(Image image) 水平翻转图像
flip(Image image, File outFile) 水平翻转图像
flip(Image image, ImageOutputStream out) 水平翻转图像,写出格式为JPG
flip(Image image, OutputStream out) 水平翻转图像
getColor(int rgb) 获取一个RGB值对应的颜色
getColor(String colorName) 将颜色值转换成具体的颜色类型 汇集了常用的颜色集,支持以下几种形式:
getImage(URL url) 从URL中获取或读取图片对象
getImageInputStream(InputStream in) 获取ImageInputStream
getImageOutputStream(File outFile) 获取ImageOutputStream
getImageOutputStream(OutputStream out) 获取ImageOutputStream
getMainColor(BufferedImage image, int[]... rgbFilters) 获取给定图片的主色调,背景填充用
getPointBaseCentre(Rectangle rectangle, int backgroundWidth, int backgroundHeight) 获得修正后的矩形坐标位置,变为以背景中心为基准坐标(即x,y == 0,0时,处于背景正中)
getReader(String type) 获得ImageReader
getRectangle(String str, Font font) 获取font的样式应用在str上的整个矩形
getWriter(Image img, String formatName) 根据给定的Image对象和格式获取对应的ImageWriter,如果未找到合适的Writer,返回null
getWriter(String formatName) 根据给定的图片格式或者扩展名获取ImageWriter,如果未找到合适的Writer,返回null
gray(File srcImageFile, File destImageFile) 彩色转为黑白
gray(Image srcImage) 彩色转为黑白
gray(Image srcImage, File outFile) 彩色转为黑白
gray(Image srcImage, ImageOutputStream destImageStream) 彩色转为黑白
此方法并不关闭流
gray(ImageInputStream srcStream, ImageOutputStream destStream) 彩色转为黑白
此方法并不关闭流
gray(Image srcImage, OutputStream out) 彩色转为黑白
此方法并不关闭流
gray(InputStream srcStream, OutputStream destStream) 彩色转为黑白
此方法并不关闭流
hexToColor(String hex) 16进制的颜色值转换为Color对象,例如#fcf6d6
pressImage(File srcImageFile, File destImageFile, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
pressImage(Image srcImage, File outFile, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(Image srcImage, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(Image srcImage, ImageOutputStream destImageStream, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(Image srcImage, Image pressImg, Rectangle rectangle, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(ImageInputStream srcStream, ImageOutputStream destStream, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(Image srcImage, OutputStream out, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressImage(InputStream srcStream, OutputStream destStream, Image pressImg, int x, int y, float alpha) 给图片添加图片水印
此方法并不关闭流
pressText(File imageFile, File destFile, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
pressText(Image srcImage, File destFile, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
pressText(Image srcImage, ImageOutputStream destImageStream, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
pressText(ImageInputStream srcStream, ImageOutputStream destStream, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
pressText(Image srcImage, OutputStream to, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
pressText(Image srcImage, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
pressText(InputStream srcStream, OutputStream destStream, String pressText, Color color, Font font, int x, int y, float alpha) 给图片添加文字水印
此方法并不关闭流
randomColor() 生成随机颜色
randomColor(Random random) 生成随机颜色
read(File imageFile) 从文件中读取图片
read(ImageInputStream imageStream) 从图片流中读取图片
read(InputStream imageStream) 从流中读取图片
read(Resource resource) 从Resource中读取图片
read(String imageFilePath) 从文件中读取图片,请使用绝对路径,使用相对路径会相对于ClassPath
read(URL imageUrl) 从URL中读取图片
rotate(File imageFile, int degree, File outFile) 旋转图片为指定角度
此方法不会关闭输出流
rotate(Image image, int degree) 旋转图片为指定角度
来自:http://blog.51cto.com/cping1982/130066
rotate(Image image, int degree, File outFile) 旋转图片为指定角度
此方法不会关闭输出流
rotate(Image image, int degree, ImageOutputStream out) 旋转图片为指定角度
此方法不会关闭输出流,输出格式为JPG
rotate(Image image, int degree, OutputStream out) 旋转图片为指定角度
此方法不会关闭输出流
scale(File srcImageFile, File destImageFile, float scale) 缩放图像(按比例缩放),目标文件的扩展名决定目标文件类型
scale(File srcImageFile, File destImageFile, int width, int height, Color fixedColor) 缩放图像(按高度和宽度缩放)
缩放后默认格式与源图片相同,无法识别原图片默认JPG
scale(Image srcImg, File destFile, float scale) 缩放图像(按比例缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(Image srcImg, float scale) 缩放图像(按比例缩放)
scale(Image srcImg, ImageOutputStream destImageStream, float scale) 缩放图像(按比例缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(Image srcImage, ImageOutputStream destImageStream, int width, int height, Color fixedColor) 缩放图像(按高度和宽度缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(ImageInputStream srcStream, ImageOutputStream destStream, float scale) 缩放图像(按比例缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(ImageInputStream srcStream, ImageOutputStream destStream, int width, int height, Color fixedColor) 缩放图像(按高度和宽度缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(Image srcImg, int width, int height) 缩放图像(按长宽缩放)
注意:目标长宽与原图不成比例会变形
scale(Image srcImage, int width, int height, Color fixedColor) 缩放图像(按高度和宽度缩放)
缩放后默认为jpeg格式
scale(Image srcImg, OutputStream out, float scale) 缩放图像(按比例缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(InputStream srcStream, OutputStream destStream, float scale) 缩放图像(按比例缩放)
缩放后默认为jpeg格式,此方法并不关闭流
scale(InputStream srcStream, OutputStream destStream, int width, int height, Color fixedColor) 缩放图像(按高度和宽度缩放)
缩放后默认为jpeg格式,此方法并不关闭流
slice(File srcImageFile, File descDir, int destWidth, int destHeight) 图像切片(指定切片的宽度和高度)
slice(Image srcImage, File descDir, int destWidth, int destHeight) 图像切片(指定切片的宽度和高度)
sliceByRowsAndCols(File srcImageFile, File destDir, int rows, int cols) 图像切割(指定切片的行数和列数)
sliceByRowsAndCols(Image srcImage, File destDir, int rows, int cols) 图像切割(指定切片的行数和列数),默认RGB模式
toBase64(Image image, String imageType) 将图片对象转换为Base64形式
toBase64DataUri(Image image, String imageType) 将图片对象转换为Base64的Data URI形式,格式为:data:image/[imageType];base64,[data]
toBufferedImage(Image img) Image 转 BufferedImage
首先尝试强转,否则新建一个BufferedImage后重新绘制,使用 BufferedImage.TYPE_INT_RGB 模式
toBufferedImage(Image image, int imageType) Image 转 BufferedImage
如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制
toBufferedImage(Image image, String imageType) Image 转 BufferedImage
如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制
默认的,png图片使用 BufferedImage.TYPE_INT_ARGB模式,其它使用 BufferedImage.TYPE_INT_RGB 模式
toBytes(Image image, String imageType) 将图片对象转换为bytes形式
toHex(Color color) Color对象转16进制表示,例如#fcf6d6
toHex(int r, int g, int b) RGB颜色值转换成十六进制颜色码
toImage(byte[] imageBytes) 将的图像bytes转为 BufferedImage
toImage(String base64) 将Base64编码的图像信息转为 BufferedImage
toRenderedImage(Image img) Image 转 RenderedImage
首先尝试强转,否则新建一个BufferedImage后重新绘制,使用 BufferedImage.TYPE_INT_RGB 模式。
toStream(Image image, String imageType) 将图片对象转换为InputStream形式
transform(AffineTransform xform, BufferedImage image) 转换图片
可以使用一系列平移 (translation)、缩放 (scale)、翻转 (flip)、旋转 (rotation) 和错切 (shear) 来构造仿射变换。
write(Image image, File targetFile) 写出图像为目标文件扩展名对应的格式
write(Image image, ImageWriter writer, ImageOutputStream output, float quality) 通过ImageWriter写出图片到输出流
write(ImageInputStream srcStream, String formatName, ImageOutputStream destStream) 按照目标格式写出图像:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
此方法并不关闭流
write(Image image, String imageType, ImageOutputStream destImageStream) 写出图像为指定格式:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
此方法并不关闭流
write(Image image, String imageType, ImageOutputStream destImageStream, float quality) 写出图像为指定格式
write(Image image, String imageType, OutputStream out) 写出图像:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
此方法并不关闭流
writeJpg(Image image, ImageOutputStream destImageStream) 写出图像为JPG格式
writeJpg(Image image, OutputStream out) 写出图像为JPG格式
writePng(Image image, ImageOutputStream destImageStream) 写出图像为PNG格式
writePng(Image image, OutputStream out) 写出图像为PNG格式

BufferUtil

ByteBuffer 工具类

此工具来自于 t-io 项目以及其它项目的相关部分收集

ByteBuffer的相关介绍见:https://www.cnblogs.com/ruber/p/6857159.html

方法 介绍
copy(ByteBuffer src, ByteBuffer dest) 拷贝ByteBuffer
copy(ByteBuffer src, ByteBuffer dest, int length) 拷贝ByteBuffer
copy(ByteBuffer src, int srcStart, ByteBuffer dest, int destStart, int length) 拷贝ByteBuffer
copy(ByteBuffer src, int start, int end) 拷贝到一个新的ByteBuffer
create(byte[] data) 创建新Buffer
create(CharSequence data, Charset charset) 从字符串创建新Buffer
createCharBuffer(int capacity) 创建CharBuffer
createUtf8(CharSequence data) 从字符串创建新Buffer,使用UTF-8编码
lineEnd(ByteBuffer buffer) 一行的末尾位置,查找位置时位移ByteBuffer到结束位置
lineEnd(ByteBuffer buffer, int maxLength) 一行的末尾位置,查找位置时位移ByteBuffer到结束位置
支持的换行符如下:
readBytes(ByteBuffer buffer) 读取剩余部分bytes
readBytes(ByteBuffer buffer, int maxLength) 读取指定长度的bytes
如果长度不足,则读取剩余部分,此时buffer必须为读模式
readBytes(ByteBuffer buffer, int start, int end) 读取指定区间的数据
readLine(ByteBuffer buffer, Charset charset) 读取一行,如果buffer中最后一部分并非完整一行,则返回null
支持的换行符如下:
readStr(ByteBuffer buffer, Charset charset) 读取剩余部分并转为字符串
readUtf8Str(ByteBuffer buffer) 读取剩余部分并转为UTF-8编码字符串

FileTypeUtil

文件类型判断工具类

方法 介绍
getType(File file) 根据文件流的头部信息获得文件类型
getType(InputStream in) 根据文件流的头部信息获得文件类型
getType(InputStream in, String filename) 根据文件流的头部信息获得文件类型
getType(String fileStreamHexHead) 根据文件流的头部信息获得文件类型
getTypeByPath(String path) 通过路径获得文件类型
putFileType(String fileStreamHexHead, String extName) 增加文件类型映射
如果已经存在将覆盖之前的映射
removeFileType(String fileStreamHexHead) 移除文件类型映射

FileUtil

文件工具类

方法 介绍
appendLines(Collection list, File file, Charset charset) 将列表写入文件,追加模式
appendLines(Collection list, File file, String charset) 将列表写入文件,追加模式
appendLines(Collection list, String path, Charset charset) 将列表写入文件,追加模式
appendLines(Collection list, String path, String charset) 将列表写入文件,追加模式
appendString(String content, File file, Charset charset) 将String写入文件,追加模式
appendString(String content, File file, String charset) 将String写入文件,追加模式
appendString(String content, String path, Charset charset) 将String写入文件,追加模式
appendString(String content, String path, String charset) 将String写入文件,追加模式
appendUtf8Lines(Collection list, File file) 将列表写入文件,追加模式
appendUtf8Lines(Collection list, String path) 将列表写入文件,追加模式
appendUtf8String(String content, File file) 将String写入文件,UTF-8编码追加模式
appendUtf8String(String content, String path) 将String写入文件,UTF-8编码追加模式
checkSlip(File parentFile, File file) 检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。
checksum(File file, Checksum checksum) 计算文件校验码
checksumCRC32(File file) 计算文件CRC32校验码
clean(File directory) 清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
clean(String dirPath) 清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
cleanEmpty(File directory) 清理空文件夹
此方法用于递归删除空的文件夹,不删除文件
如果传入的文件夹本身就是空的,删除这个文件夹
cleanInvalid(String fileName) 清除文件名中的在Windows下不支持的非法字符,包括: \ / : * ? " < >
containsInvalid(String fileName) 文件名中是否包含在Windows下不支持的非法字符,包括: \ / : * ? " < >
contentEquals(File file1, File file2) 比较两个文件内容是否相同
首先比较长度,长度一致再比较内容
此方法来自Apache Commons io
contentEqualsIgnoreEOL(File file1, File file2, Charset charset) 比较两个文件内容是否相同
首先比较长度,长度一致再比较内容,比较内容采用按行读取,每行比较
此方法来自Apache Commons io
convertCharset(File file, Charset srcCharset, Charset destCharset) 转换文件编码
此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
convertLineSeparator(File file, Charset charset, LineSeparator lineSeparator) 转换换行符
将给定文件的换行符转换为指定换行符
copy(File src, File dest, boolean isOverride) 复制文件或目录
情况如下:
copy(String srcPath, String destPath, boolean isOverride) 复制文件或目录
如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
copyContent(File src, File dest, boolean isOverride) 复制文件或目录
情况如下:
copyFile(File src, File dest, StandardCopyOption... options) 通过JDK7+的 Files#copy(Path, Path, CopyOption...) 方法拷贝文件
copyFile(String src, String dest, StandardCopyOption... options) 通过JDK7+的 Files#copy(Path, Path, CopyOption...) 方法拷贝文件
copyFilesFromDir(File src, File dest, boolean isOverride) 复制文件或目录
情况如下:
createRandomAccessFile(File file, FileMode mode) 创建RandomAccessFile
createRandomAccessFile(Path path, FileMode mode) 创建RandomAccessFile
createTempFile(File dir) 创建临时文件
创建后的文件名为 prefix[Randon].tmp
createTempFile(File dir, boolean isReCreat) 创建临时文件
创建后的文件名为 prefix[Randon].tmp
createTempFile(String prefix, String suffix, File dir, boolean isReCreat) 创建临时文件
创建后的文件名为 prefix[Randon].suffix From com.jodd.io.FileUtil
del(File file) 删除文件或者文件夹
注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
del(String fullFileOrDirPath) 删除文件或者文件夹
路径如果为相对路径,会转换为ClassPath路径! 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
equals(File file1, File file2) 检查两个文件是否是同一个文件
所谓文件相同,是指File对象是否指向同一个文件或文件夹
exist(File file) 判断文件是否存在,如果file为null,则返回false
exist(String path) 判断文件是否存在,如果path为null,则返回false
exist(String directory, String regexp) 是否存在匹配文件
extName(File file) 获取文件扩展名(后缀名),扩展名不带“.”
extName(String fileName) 获得文件的扩展名(后缀名),扩展名不带“.”
file(File directory, String... names) 通过多层目录参数创建文件
此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
file(File parent, String path) 创建File对象
根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
file(String... names) 通过多层目录创建文件
file(String path) 创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找
file(String parent, String path) 创建File对象
此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
file(URI uri) 创建File对象
file(URL url) 创建File对象
getAbsolutePath(File file) 获取标准的绝对路径
getAbsolutePath(String path) 获取绝对路径,相对于ClassPath的目录
如果给定就是绝对路径,则返回原路径,原路径把所有\替换为/
兼容Spring风格的路径表示,例如:classpath:config/example.setting也会被识别后转换
getAbsolutePath(String path, Class<?> baseClass) 获取绝对路径
此方法不会判定给定路径是否有效(文件或目录存在)
getBOMInputStream(File file) 获得BOM输入流,用于处理带BOM头的文件
getBOMReader(File file) 读取带BOM头的文件为Reader
getCanonicalPath(File file) 获取规范的绝对路径
getInputStream(File file) 获得输入流
getInputStream(String path) 获得输入流
getLineSeparator() 获取当前系统的换行分隔符
getMimeType(String filePath) 根据文件扩展名获得MimeType
getName(File file) 返回文件名
getName(String filePath) 返回文件名
getOutputStream(File file) 获得一个输出流对象
getOutputStream(String path) 获得一个输出流对象
getParent(File file, int level) 获取指定层级的父路径
getParent(String filePath, int level) 获取指定层级的父路径
getPrefix(File file) 返回主文件名
getPrefix(String fileName) 返回主文件名
getPrintWriter(File file, Charset charset, boolean isAppend) 获得一个打印写入对象,可以有print
getPrintWriter(File file, String charset, boolean isAppend) 获得一个打印写入对象,可以有print
getPrintWriter(String path, Charset charset, boolean isAppend) 获得一个打印写入对象,可以有print
getPrintWriter(String path, String charset, boolean isAppend) 获得一个打印写入对象,可以有print
getReader(File file, Charset charset) 获得一个文件读取器
getReader(File file, String charsetName) Deprecated.
请使用 getReader(File, Charset)
getReader(String path, Charset charset) 获得一个文件读取器
getReader(String path, String charsetName) Deprecated.
请使用 getReader(String, Charset)
getSuffix(File file) 获取文件后缀名,扩展名不带“.”
getSuffix(String fileName) 获得文件后缀名,扩展名不带“.”
getTmpDir() 获取临时文件目录
getTmpDirPath() 获取临时文件路径(绝对路径)
getType(File file) 根据文件流的头部信息获得文件类型
getUserHomeDir() 获取用户目录
getUserHomePath() 获取用户路径(绝对路径)
getUtf8Reader(File file) 获得一个文件读取器
getUtf8Reader(String path) 获得一个文件读取器
getWebRoot() 获取Web项目下的web root路径
原理是首先获取ClassPath路径,由于在web项目中ClassPath位于 WEB-INF/classes/下,故向上获取两级目录即可。
getWriter(File file, Charset charset, boolean isAppend) 获得一个带缓存的写入对象
getWriter(File file, String charsetName, boolean isAppend) Deprecated.
请使用 getWriter(File, Charset, boolean)
getWriter(String path, Charset charset, boolean isAppend) 获得一个带缓存的写入对象
getWriter(String path, String charsetName, boolean isAppend) Deprecated.
请使用 getWriter(String, Charset, boolean)
isAbsolutePath(String path) 给定路径已经是绝对路径
此方法并没有针对路径做标准化,建议先执行normalize(String)方法标准化路径后判断
isDirectory(File file) 判断是否为目录,如果file为null,则返回false
isDirectory(String path) 判断是否为目录,如果path为null,则返回false
isDirEmpty(File dir) 目录是否为空
isEmpty(File file) 文件是否为空
目录:里面没有文件时为空 文件:文件大小为0时为空
isFile(File file) 判断是否为文件,如果file为null,则返回false
isFile(String path) 判断是否为文件,如果path为null,则返回false
isModifed(File file, long lastModifyTime) Deprecated.
拼写错误,请使用isModified(File, long)
isModified(File file, long lastModifyTime) 判断文件是否被改动
如果文件对象为 null 或者文件不存在,被视为改动
isNotEmpty(File file) 目录是否为空
isSub(File parent, File sub) 判断给定的目录是否为给定文件或文件夹的子目录
isSymlink(File file) 判断是否为符号链接文件
isWindows() 是否为Windows环境
lastIndexOfSeparator(String filePath) 获得最后一个文件路径分隔符的位置
lastModifiedTime(File file) 指定文件最后修改时间
lastModifiedTime(String path) 指定路径文件最后修改时间
listFileNames(String path) 获得指定目录下所有文件
不会扫描子目录
load(File file, Charset charset, FileReader.ReaderHandler readerHandler) 按照给定的readerHandler读取文件中的数据
load(String path, Charset charset, FileReader.ReaderHandler readerHandler) 按照给定的readerHandler读取文件中的数据
load(String path, String charset, FileReader.ReaderHandler readerHandler) 按照给定的readerHandler读取文件中的数据
loadUtf8(File file, FileReader.ReaderHandler readerHandler) 按照给定的readerHandler读取文件中的数据
loadUtf8(String path, FileReader.ReaderHandler readerHandler) 按照给定的readerHandler读取文件中的数据
loopFiles(File file) 递归遍历目录以及子目录中的所有文件
loopFiles(File file, FileFilter fileFilter) 递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果
loopFiles(File file, int maxDepth, FileFilter fileFilter) 递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果
loopFiles(String path) 递归遍历目录以及子目录中的所有文件
loopFiles(String path, FileFilter fileFilter) 递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果
ls(String path) 列出指定路径下的目录和文件
给定的绝对路径不能是压缩包中的路径
mainName(File file) 返回主文件名
mainName(String fileName) 返回主文件名
mkdir(File dir) 创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
mkdir(String dirPath) 创建文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
mkParentDirs(File file) 创建所给文件或目录的父目录
mkParentDirs(String path) 创建父文件夹,如果存在直接返回此文件夹
move(File src, File target, boolean isOverride) 移动文件或者目录
moveContent(File src, File target, boolean isOverride) 移动文件或者目录
newerThan(File file, File reference) 给定文件或目录的最后修改时间是否晚于给定时间
newerThan(File file, long timeMillis) 给定文件或目录的最后修改时间是否晚于给定时间
newFile(String path) 创建File对象,相当于调用new File(),不做任何处理
normalize(String path) 修复路径
如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留 1.
pathEndsWith(File file, String suffix) 判断文件路径是否有指定后缀,忽略大小写
常用语判断扩展名
pathEquals(File file1, File file2) 文件路径是否相同
取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。
readableFileSize(File file) 可读的文件大小
readableFileSize(long size) 可读的文件大小
参考 http://stackoverflow.com/questions/3263892/format-file-size-as-mb-gb-etc
readBytes(File file) 读取文件所有数据
文件的长度不能超过Integer.MAX_VALUE
readBytes(String filePath) 读取文件所有数据
文件的长度不能超过Integer.MAX_VALUE
readLine(RandomAccessFile file, Charset charset) 单行处理文件内容
readLine(RandomAccessFile file, Charset charset, LineHandler lineHandler) 单行处理文件内容
readLines(File file, Charset charset) 从文件中读取每一行数据
readLines(File file, Charset charset, LineHandler lineHandler) 按行处理文件内容
readLines(File file, Charset charset, T collection) 从文件中读取每一行数据
readLines(File file, String charset) 从文件中读取每一行数据
readLines(File file, String charset, T collection) 从文件中读取每一行数据
readLines(RandomAccessFile file, Charset charset, LineHandler lineHandler) 按行处理文件内容
readLines(String path, Charset charset) 从文件中读取每一行数据
readLines(String path, Charset charset, T collection) 从文件中读取每一行数据
readLines(String path, String charset) 从文件中读取每一行数据
readLines(String path, String charset, T collection) 从文件中读取每一行数据
readLines(URL url, Charset charset) 从文件中读取每一行数据
readLines(URL url, Charset charset, T collection) 从文件中读取每一行数据
readLines(URL url, String charsetName) Deprecated.
请使用 readLines(URL, Charset)
readLines(URL url, String charsetName, T collection) Deprecated.
请使用 readLines(URL, Charset, Collection)
readString(File file, Charset charset) 读取文件内容
readString(File file, String charsetName) Deprecated.
请使用 readString(File, Charset)
readString(String path, Charset charset) 读取文件内容
readString(String path, String charsetName) Deprecated.
请使用 readString(String, Charset)
readString(URL url, Charset charset) 读取文件内容
readString(URL url, String charsetName) Deprecated.
请使用 readString(URL, Charset)
readUtf8Lines(File file) 从文件中读取每一行数据
readUtf8Lines(File file, LineHandler lineHandler) 按行处理文件内容,编码为UTF-8
readUtf8Lines(File file, T collection) 从文件中读取每一行数据,数据编码为UTF-8
readUtf8Lines(String path) 从文件中读取每一行数据,编码为UTF-8
readUtf8Lines(String path, T collection) 从文件中读取每一行的UTF-8编码数据
readUtf8Lines(URL url) 从文件中读取每一行数据
readUtf8Lines(URL url, T collection) 从文件中读取每一行数据,编码为UTF-8
readUtf8String(File file) 读取文件内容
readUtf8String(String path) 读取文件内容
rename(File file, String newName, boolean isOverride) 修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。
rename(File file, String newName, boolean isRetainExt, boolean isOverride) 修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
1、isRetainExt为true时,保留原扩展名:
size(File file) 计算目录或文件的总大小
当给定对象为文件时,直接调用 File.length()
当给定对象为目录时,遍历目录下的所有文件和目录,递归计算其大小,求和返回
subPath(String rootDir, File file) 获得相对子路径
subPath(String dirPath, String filePath) 获得相对子路径,忽略大小写
tail(File file, Charset charset) 文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程
tail(File file, Charset charset, LineHandler handler) 文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程
tail(File file, LineHandler handler) 文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程
touch(File file) 创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
touch(File parent, String path) 创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
touch(String fullFilePath) 创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
touch(String parent, String path) 创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型
walkFiles(File file, Consumer consumer) 递归遍历目录并处理目录下的文件,可以处理目录或文件: 非目录则直接调用Consumer处理 目录则递归调用此方法处理
writeBytes(byte[] data, File dest) 写数据到文件中
writeBytes(byte[] data, File dest, int off, int len, boolean isAppend) 写入数据到文件
writeBytes(byte[] data, String path) 写数据到文件中
writeFromStream(InputStream in, File dest) 将流的内容写入文件
此方法会自动关闭输入流
writeFromStream(InputStream in, File dest, boolean isCloseIn) 将流的内容写入文件
writeFromStream(InputStream in, String fullFilePath) 将流的内容写入文件
此方法会自动关闭输入流
writeLines(Collection list, File file, Charset charset) 将列表写入文件,覆盖模式
writeLines(Collection list, File file, Charset charset, boolean isAppend) 将列表写入文件
writeLines(Collection list, File file, String charset) 将列表写入文件,覆盖模式
writeLines(Collection list, File file, String charset, boolean isAppend) 将列表写入文件
writeLines(Collection list, String path, Charset charset) 将列表写入文件,覆盖模式
writeLines(Collection list, String path, Charset charset, boolean isAppend) 将列表写入文件
writeLines(Collection list, String path, String charset) 将列表写入文件,覆盖模式
writeLines(Collection list, String path, String charset, boolean isAppend) 将列表写入文件
writeMap(Map map, File file, Charset charset, String kvSeparator, boolean isAppend) 将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔
writeString(String content, File file, Charset charset) 将String写入文件,覆盖模式
writeString(String content, File file, String charset) 将String写入文件,覆盖模式
writeString(String content, String path, Charset charset) 将String写入文件,覆盖模式
writeString(String content, String path, String charset) 将String写入文件,覆盖模式
writeToStream(File file, OutputStream out) 将文件写入流中,此方法不会关闭输出流
writeToStream(String fullFilePath, OutputStream out) 将路径对应文件写入流中,此方法不会关闭输出流
writeUtf8Lines(Collection list, File file) 将列表写入文件,覆盖模式,编码为UTF-8
writeUtf8Lines(Collection list, String path) 将列表写入文件,覆盖模式,编码为UTF-8
writeUtf8Map(Map map, File file, String kvSeparator, boolean isAppend) 将Map写入文件,每个键值对为一行,一行中键与值之间使用kvSeparator分隔
writeUtf8String(String content, File file) 将String写入文件,覆盖模式,字符集为UTF-8
writeUtf8String(String content, String path) 将String写入文件,覆盖模式,字符集为UTF-8

IoUtil

IO工具类

IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。

方法 介绍
checksum(InputStream in, Checksum checksum) 计算流的校验码,计算后关闭流
checksumCRC32(InputStream in) 计算流CRC32校验码,计算后关闭流
checksumValue(InputStream in, Checksum checksum) 计算流的校验码,计算后关闭流
close(Closeable closeable) 关闭
关闭失败不会抛出异常
closeIfPosible(Object obj) 尝试关闭指定对象
判断对象如果实现了AutoCloseable,则调用之
contentEquals(InputStream input1, InputStream input2) 对比两个流内容是否相同
内部会转换流为 BufferedInputStream
contentEquals(Reader input1, Reader input2) 对比两个Reader的内容是否一致
内部会转换流为 BufferedInputStream
contentEqualsIgnoreEOL(Reader input1, Reader input2) 对比两个流内容是否相同,忽略EOL字符
内部会转换流为 BufferedInputStream
copy(FileInputStream in, FileOutputStream out) 拷贝文件流,使用NIO
copy(InputStream in, OutputStream out) 拷贝流,使用默认Buffer大小,拷贝后不关闭流
copy(InputStream in, OutputStream out, int bufferSize) 拷贝流,拷贝后不关闭流
copy(InputStream in, OutputStream out, int bufferSize, long count, StreamProgress streamProgress) 拷贝流,拷贝后不关闭流
copy(InputStream in, OutputStream out, int bufferSize, StreamProgress streamProgress) 拷贝流,拷贝后不关闭流
copy(Reader reader, Writer writer) 将Reader中的内容复制到Writer中 使用默认缓存大小,拷贝后不关闭Reader
copy(Reader reader, Writer writer, int bufferSize) 将Reader中的内容复制到Writer中,拷贝后不关闭Reader
copy(Reader reader, Writer writer, int bufferSize, long count, StreamProgress streamProgress) 将Reader中的内容复制到Writer中,拷贝后不关闭Reader
copy(Reader reader, Writer writer, int bufferSize, StreamProgress streamProgress) 将Reader中的内容复制到Writer中,拷贝后不关闭Reader
flush(Flushable flushable) 从缓存中刷出数据
getBomReader(InputStream in) 从InputStream中获取BomReader
getPushBackReader(Reader reader, int pushBackSize) 获得PushbackReader
如果是PushbackReader强转返回,否则新建
getReader(BOMInputStream in) 从BOMInputStream中获取Reader
getReader(InputStream in, Charset charset) 获得一个Reader
getReader(InputStream in, String charsetName) Deprecated.
请使用 getReader(InputStream, Charset)
getReader(Reader reader) 获得BufferedReader
如果是BufferedReader强转返回,否则新建。如果提供的Reader为null返回null
getUtf8Reader(InputStream in) 获得一个文件读取器,默认使用UTF-8编码
getUtf8Writer(OutputStream out) 获得一个Writer,默认编码UTF-8
getWriter(OutputStream out, Charset charset) 获得一个Writer
getWriter(OutputStream out, String charsetName) Deprecated.
请使用 getWriter(OutputStream, Charset)
lineIter(InputStream in, Charset charset) 返回行遍历器
lineIter(Reader reader) 返回行遍历器
read(InputStream in) 从流中读取内容,读到输出流中,读取完毕后关闭流
read(InputStream in, boolean isClose) 从流中读取内容,读到输出流中,读取完毕后可选是否关闭流
read(InputStream in, Charset charset) 从流中读取内容,读取完毕后关闭流
read(InputStream in, String charsetName) Deprecated.
请使用 read(InputStream, Charset)
read(Reader reader) 从Reader中读取String,读取完毕后关闭Reader
read(Reader reader, boolean isClose) 从Reader中读取String
readBytes(InputStream in) 从流中读取bytes,读取完毕后关闭流
readBytes(InputStream in, boolean isClose) 从流中读取bytes
readBytes(InputStream in, int length) 读取指定长度的byte数组,不关闭流
readHex(InputStream in, int length, boolean toLowerCase) 读取16进制字符串
readHex28Lower(InputStream in) 从流中读取前28个byte并转换为16进制,字母部分使用小写
readHex28Upper(InputStream in) 从流中读取前28个byte并转换为16进制,字母部分使用大写
readLines(InputStream in, Charset charset, LineHandler lineHandler) 按行读取数据,针对每行的数据做处理
readLines(InputStream in, Charset charset, T collection) 从流中读取内容
readLines(InputStream in, String charsetName, T collection) Deprecated.
请使用 readLines(InputStream, Charset, Collection)
readLines(Reader reader, LineHandler lineHandler) 按行读取数据,针对每行的数据做处理
Reader自带编码定义,因此读取数据的编码跟随其编码。
此方法不会关闭流,除非抛出异常
readLines(Reader reader, T collection) 从Reader中读取内容
readObj(InputStream in) 从流中读取对象,即对象的反序列化
readObj(InputStream in, Class clazz) 从流中读取对象,即对象的反序列化,读取后不关闭流
readObj(ValidateObjectInputStream in, Class clazz) 从流中读取对象,即对象的反序列化,读取后不关闭流
readUtf8(InputStream in) 从流中读取UTF8编码的内容
readUtf8Lines(InputStream in, LineHandler lineHandler) 按行读取UTF-8编码数据,针对每行的数据做处理
readUtf8Lines(InputStream in, T collection) 从流中读取内容,使用UTF-8编码
toAvailableStream(InputStream in) 将指定InputStream 转换为InputStream.available()方法可用的流。
在Socket通信流中,服务端未返回数据情况下InputStream.available()方法始终为0
因此,在读取前需要调用InputStream.read()读取一个字节(未返回会阻塞),一旦读取到了,InputStream.available()方法就正常了。
需要注意的是,在网络流中,是按照块来传输的,所以 InputStream.available() 读取到的并非最终长度,而是此次块的长度。
此方法返回对象的规则为: FileInputStream 返回原对象,因为文件流的available方法本身可用 其它InputStream 返回PushbackInputStream
toBuffered(InputStream in) 转换为BufferedInputStream
toBuffered(InputStream in, int bufferSize) 转换为BufferedInputStream
toBuffered(OutputStream out) 转换为BufferedOutputStream
toBuffered(OutputStream out, int bufferSize) 转换为BufferedOutputStream
toBuffered(Reader reader) 转换为BufferedReader
toBuffered(Reader reader, int bufferSize) 转换为BufferedReader
toBuffered(Writer writer) 转换为BufferedWriter
toBuffered(Writer writer, int bufferSize) 转换为BufferedWriter
toMarkSupportStream(InputStream in) 将InputStream转换为支持mark标记的流
若原流支持mark标记,则返回原流,否则使用BufferedInputStream 包装之
toPushbackStream(InputStream in, int pushBackSize) 转换为PushbackInputStream
如果传入的输入流已经是PushbackInputStream,强转返回,否则新建一个
toStream(byte[] content) byte[] 转为ByteArrayInputStream
toStream(ByteArrayOutputStream out) ByteArrayOutputStream转为ByteArrayInputStream
toStream(File file) 文件转为FileInputStream
toStream(String content, Charset charset) String 转为流
toStream(String content, String charsetName) Deprecated.
请使用 toStream(String, Charset)
toUtf8Stream(String content) String 转为UTF-8编码的字节流流
write(OutputStream out, boolean isCloseOut, byte[] content) 将byte[]写到流中
write(OutputStream out, Charset charset, boolean isCloseOut, Object... contents) 将多部分内容写到流中,自动转换为字符串
write(OutputStream out, String charsetName, boolean isCloseOut, Object... contents) Deprecated.
请使用 write(OutputStream, Charset, boolean, Object...)
writeObj(OutputStream out, boolean isCloseOut, Serializable obj) 将多部分内容写到流中
writeObjects(OutputStream out, boolean isCloseOut, Serializable... contents) 将多部分内容写到流中
writeUtf8(OutputStream out, boolean isCloseOut, Object... contents) 将多部分内容写到流中,自动转换为UTF-8字符串

ManifestUtil

Jar包中manifest.mf文件获取和解析工具类 来自Jodd

方法 介绍
getManifest(Class<?> cls) 根据 class 获取 所在 jar 包文件的 Manifest
此方法主要利用class定位jar包,如引入hutool-all,则传入hutool中任意一个类即可获取这个jar的Manifest信息
如果这个类不在jar包中,返回null
getManifest(File classpathItem) 获取 jar 包文件或项目目录下的 Manifest
getManifest(JarFile jarFile) 根据 JarURLConnection 获取 jar 包文件的 Manifest
getManifest(JarURLConnection connection) 根据 JarURLConnection 获取 jar 包文件的 Manifest

NioUtil

NIO相关工具封装,主要针对Channel读写、拷贝等封装

方法 介绍
close(AutoCloseable closeable) 关闭
关闭失败不会抛出异常
copy(FileChannel inChannel, FileChannel outChannel) 拷贝文件Channel,使用NIO,拷贝后不会关闭channel
copy(ReadableByteChannel in, WritableByteChannel out) 拷贝流,使用NIO,不会关闭channel
copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize) 拷贝流,使用NIO,不会关闭channel
copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, long count, StreamProgress streamProgress) 拷贝流,使用NIO,不会关闭channel
copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, StreamProgress streamProgress) 拷贝流,使用NIO,不会关闭channel
copyByNIO(InputStream in, OutputStream out, int bufferSize, long count, StreamProgress streamProgress) 拷贝流
本方法不会关闭流
copyByNIO(InputStream in, OutputStream out, int bufferSize, StreamProgress streamProgress) 拷贝流 thanks to: https://github.com/venusdrogon/feilong-io/blob/master/src/main/java/com/feilong/io/IOWriteUtil.java
本方法不会关闭流
read(FileChannel fileChannel, Charset charset) 从FileChannel中读取内容
read(FileChannel fileChannel, String charsetName) 从FileChannel中读取内容,读取完毕后并不关闭Channel
read(ReadableByteChannel channel) 从流中读取内容,读到输出流中
read(ReadableByteChannel channel, Charset charset) 从流中读取内容,读取完毕后并不关闭流
readUtf8(FileChannel fileChannel) 从FileChannel中读取UTF-8编码内容

FileNameUtil

文件名相关工具类

方法 介绍
cleanInvalid(String fileName) 清除文件名中的在Windows下不支持的非法字符,包括: \ / : * ? " < >
containsInvalid(String fileName) 文件名中是否包含在Windows下不支持的非法字符,包括: \ / : * ? " < >
extName(File file) 获取文件扩展名(后缀名),扩展名不带“.”
extName(String fileName) 获得文件的扩展名(后缀名),扩展名不带“.”
getName(File file) 返回文件名
getName(String filePath) 返回文件名
getPrefix(File file) 返回主文件名
getPrefix(String fileName) 返回主文件名
getSuffix(File file) 获取文件后缀名,扩展名不带“.”
getSuffix(String fileName) 获得文件后缀名,扩展名不带“.”
isType(String fileName, String... extNames) 根据文件名检查文件类型,忽略大小写
mainName(File file) 返回主文件名
mainName(String fileName) 返回主文件名

FileSystemUtil

FileSystem相关工具类封装

参考:https://blog.csdn.net/j16421881/article/details/78858690

方法 介绍
create(String path) 创建 FileSystem
createZip(String path) 创建 Zip的FileSystem,默认UTF-8编码
createZip(String path, Charset charset) 创建 Zip的FileSystem
getRoot(FileSystem fileSystem) 获取目录的根路径,或Zip文件中的根路径

PathUtil

NIO中Path对象操作封装

方法 介绍
copy(Path src, Path target, CopyOption... options) 拷贝文件或目录,拷贝规则为: 源文件为目录,目标也为目录或不存在,则拷贝整个目录到目标目录下 源文件为文件,目标为目录或不存在,则拷贝文件到目标目录下 源文件为文件,目标也为文件,则在StandardCopyOption.REPLACE_EXISTING情况下覆盖之
copyContent(Path src, Path target, CopyOption... options) 拷贝目录下的所有文件或目录到目标目录中,此方法不支持文件对文件的拷贝。 源文件为目录,目标也为目录或不存在,则拷贝目录下所有文件和目录到目标目录下 源文件为文件,目标为目录或不存在,则拷贝文件到目标目录下
copyFile(Path src, Path target, CopyOption... options) 通过JDK7+的 Files.copy(Path, Path, CopyOption...) 方法拷贝文件
此方法不支持递归拷贝目录,如果src传入是目录,只会在目标目录中创建空目录
copyFile(Path src, Path dest, StandardCopyOption... options) 通过JDK7+的 Files.copy(Path, Path, CopyOption...) 方法拷贝文件
此方法不支持递归拷贝目录,如果src传入是目录,只会在目标目录中创建空目录
del(Path path) 删除文件或者文件夹,不追踪软链
注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
delFile(Path path) 删除文件或空目录,不追踪软链
equals(Path file1, Path file2) 检查两个文件是否是同一个文件
所谓文件相同,是指Path对象是否指向同一个文件或文件夹
exists(Path path, boolean isFollowLinks) 判断文件或目录是否存在
getAttributes(Path path, boolean isFollowLinks) 获取文件属性
getInputStream(Path path) 获得输入流
getLastPathEle(Path path) 获取指定位置的最后一个子路径部分
getMimeType(Path file) 获得文件的MimeType
getName(Path path) 获取Path文件名
getOutputStream(Path path) 获得输出流
getPathEle(Path path, int index) 获取指定位置的子路径部分,支持负数,例如index为-1表示从后数第一个节点位置
getReader(Path path, Charset charset) 获得一个文件读取器
getUtf8Reader(Path path) 获得一个文件读取器
isDirectory(Path path) 判断是否为目录,如果file为null,则返回false
此方法不会追踪到软链对应的真实地址,即软链被当作文件
isDirectory(Path path, boolean isFollowLinks) 判断是否为目录,如果file为null,则返回false
isDirEmpty(Path dirPath) 目录是否为空
isFile(Path path, boolean isFollowLinks) 判断是否为文件,如果file为null,则返回false
isSub(Path parent, Path sub) 判断给定的目录是否为给定文件或文件夹的子目录
isSymlink(Path path) 判断是否为符号链接文件
loopFiles(Path path, FileFilter fileFilter) 递归遍历目录以及子目录中的所有文件
如果提供path为文件,直接返回过滤结果
loopFiles(Path path, int maxDepth, FileFilter fileFilter) 递归遍历目录以及子目录中的所有文件
如果提供path为文件,直接返回过滤结果
mkdir(Path dir) 创建所给目录及其父目录
mkParentDirs(Path path) 创建所给文件或目录的父目录
move(Path src, Path target, boolean isOverride) 移动文件或目录
当目标是目录时,会将源文件或文件夹整体移动至目标目录下
例如: move("/usr/aaa/abc.txt", "/usr/bbb")结果为:"/usr/bbb/abc.txt" move("/usr/aaa", "/usr/bbb")结果为:"/usr/bbb/aaa"
moveContent(Path src, Path target, boolean isOverride) 移动文件或目录内容到目标目录中,例如: moveContent("/usr/aaa/abc.txt", "/usr/bbb")结果为:"/usr/bbb/abc.txt" moveContent("/usr/aaa", "/usr/bbb")结果为:"/usr/bbb"
readBytes(Path path) 读取文件的所有内容为byte数组
rename(Path path, String newName, boolean isOverride) 修改文件或目录的文件名,不变更路径,只是简单修改文件名
subPath(Path path, int fromIndex, int toIndex) 获取指定位置的子路径部分,支持负数,例如起始为-1表示从后数第一个节点位置
toAbsNormal(Path path) 将Path路径转换为标准的绝对路径
walkFiles(Path start, FileVisitor<? super Path> visitor) 遍历指定path下的文件并做处理
walkFiles(Path start, int maxDepth, FileVisitor<? super Path> visitor) 遍历指定path下的文件并做处理

ResourceUtil

Resource资源工具类

方法 介绍
getReader(String resource, Charset charset) 从ClassPath资源中获取BufferedReader
getResource(String resource) 获得资源的URL
路径用/分隔,例如:
getResource(String resource, Class<?> baseClass) 获得资源相对路径对应的URL
getResourceIter(String resource) 获取指定路径下的资源Iterator
路径格式必须为目录格式,用/分隔,例如:
getResourceObj(String path) 获取Resource 资源对象
如果提供路径为绝对路径或路径以file:开头,返回FileResource,否则返回ClassPathResource
getResources(String resource) 获取指定路径下的资源列表
路径格式必须为目录格式,用/分隔,例如:
getStream(String resource) 从ClassPath资源中获取InputStream
getStreamSafe(String resource) 从ClassPath资源中获取InputStream,当资源不存在时返回null
getUtf8Reader(String resource) 从ClassPath资源中获取BufferedReader
readBytes(String resource) 读取Classpath下的资源为byte[]
readStr(String resource, Charset charset) 读取Classpath下的资源为字符串
readUtf8Str(String resource) 读取Classpath下的资源为字符串,使用UTF-8编码

DataSizeUtil

数据大小工具类

方法 介绍
format(long size) 可读的文件大小
参考 http://stackoverflow.com/questions/3263892/format-file-size-as-mb-gb-etc
parse(String text) 解析数据大小字符串,转换为bytes大小

WatchUtil

监听工具类

主要负责文件监听器的快捷创建

方法 介绍
create(File file, int maxDepth, WatchEvent.Kind<?>... events) 创建并初始化监听
create(File file, WatchEvent.Kind<?>... events) 创建并初始化监听
create(Path path, int maxDepth, WatchEvent.Kind<?>... events) 创建并初始化监听
create(Path path, WatchEvent.Kind<?>... events) 创建并初始化监听
create(String path, int maxDepth, WatchEvent.Kind<?>... events) 创建并初始化监听
create(String path, WatchEvent.Kind<?>... events) 创建并初始化监听
create(URI uri, int maxDepth, WatchEvent.Kind<?>... events) 创建并初始化监听
create(URI uri, WatchEvent.Kind<?>... events) 创建并初始化监听
create(URL url, int maxDepth, WatchEvent.Kind<?>... events) 创建并初始化监听
create(URL url, WatchEvent.Kind<?>... events) 创建并初始化监听
createAll(File file, int maxDepth, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(File file, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(Path path, int maxDepth, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(Path path, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(String path, int maxDepth, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(String path, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(URI uri, int maxDepth, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(URI uri, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(URL url, int maxDepth, Watcher watcher) 创建并初始化监听,监听所有事件
createAll(URL url, Watcher watcher) 创建并初始化监听,监听所有事件
createModify(File file, int maxDepth, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(File file, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(Path path, int maxDepth, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(Path path, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(String path, int maxDepth, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(String path, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(URI uri, int maxDepth, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(URI uri, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(URL url, int maxDepth, Watcher watcher) 创建并初始化监听,监听修改事件
createModify(URL url, Watcher watcher) 创建并初始化监听,监听修改事件
register(Watchable watchable, WatchService watcher, WatchEvent.Kind<?>... events) 注册Watchable对象到WatchService服务

CallerUtil

调用者。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用

方法 介绍
getCaller() 获得调用者
getCaller(int depth) 获得调用者,指定第几级调用者
调用者层级关系:
getCallerCaller() 获得调用者的调用者
getCallerMethodName(boolean isFullName) 获取调用此方法的方法名
isCalledBy(Class<?> clazz) 是否被指定类调用

LambdaUtil

Lambda相关工具类

方法 介绍
getFieldName(Func1<T,?> func) 获取lambda表达式Getter或Setter函数(方法)对应的字段名称,规则如下: getXxxx获取为xxxx,如getName得到name。 setXxxx获取为xxxx,如setName得到name。 isXxxx获取为xxxx,如isName得到name。 其它不满足规则的方法名抛出IllegalArgumentException
getMethodName(Func1<T,?> func) 获取lambda表达式函数(方法)名称
resolve(Func1<T,?> func) 解析lambda表达式,加了缓存。 该缓存可能会在任意不定的时间被清除

InternUtil

规范化对象生成工具

方法 介绍
createJdkInterner() 创建JDK默认实现的字符串规范化器
createStringInterner(boolean isWeak) 创建字符串规范化器
createWeakInterner() 创建WeakHshMap实现的字符串规范化器

MethodHandleUtil

方法句柄MethodHandle封装工具类

参考: https://stackoverflow.com/questions/22614746/how-do-i-invoke-java-8-default-methods-reflectively

方法 介绍
findConstructor(Class callerClass, Class... args) 查找指定的构造方法
findConstructor(Class<?> callerClass, MethodType type) 查找指定的构造方法
findMethod(Class<?> callerClass, String name, MethodType type) 查找指定方法的方法句柄
此方法只会查找: 当前类的方法(包括构造方法和private方法) 父类的方法(包括构造方法和private方法) 当前类的static方法
invoke(boolean isSpecial, Object obj, Method method, Object... args) 执行接口或对象中的方法

interface Duck { default String quack() { return "Quack"; } } Duck duck = (Duck) Proxy.newProxyInstance( ClassLoaderUtil.getClassLoader(), new Class[] { Duck.class }, MethodHandleUtil::invoke);
invoke(Object obj, Method method, Object... args) 执行接口或对象中的方法
invokeSpecial(Object obj, Method method, Object... args) 执行接口或对象中的方法

interface Duck { default String quack() { return "Quack"; } } Duck duck = (Duck) Proxy.newProxyInstance( ClassLoaderUtil.getClassLoader(), new Class[] { Duck.class }, MethodHandleUtil::invoke);
invokeSpecial(Object obj, String methodName, Object... args) 执行接口或对象中的方法

interface Duck { default String quack() { return "Quack"; } } Duck duck = (Duck) Proxy.newProxyInstance( ClassLoaderUtil.getClassLoader(), new Class[] { Duck.class }, MethodHandleUtil::invokeDefault);
lookup(Class<?> callerClass) jdk8中如果直接调用MethodHandles.lookup()获取到的MethodHandles.Lookup在调用findSpecial和unreflectSpecial 时会出现权限不够问题,抛出"no private access for invokespecial"异常,因此针对JDK8及JDK9+分别封装lookup方法。

TreeUtil

树工具类

方法 介绍
build(List list, E parentId, NodeParser<T,E> nodeParser) 树构建
build(List list, E rootId, TreeNodeConfig treeNodeConfig, NodeParser<T,E> nodeParser) 树构建
build(List<TreeNode> list, E parentId) 树构建
build(List<TreeNode> list) 树构建
build(Map<E,Tree> map, E rootId) 树构建,按照权重排序
buildSingle(List list, E parentId, NodeParser<T,E> nodeParser) 构建单root节点树
buildSingle(List list, E rootId, TreeNodeConfig treeNodeConfig, NodeParser<T,E> nodeParser) 构建单root节点树
buildSingle(List<TreeNode> list, E parentId) 构建单root节点树
buildSingle(List<TreeNode> list) 构建单root节点树
buildSingle(Map<E,Tree> map, E rootId) 单点树构建,按照权重排序
createEmptyNode(E id) 创建空Tree的节点
getNode(Tree node, T id) 获取ID对应的节点,如果有多个ID相同的节点,只返回第一个。
此方法只查找此节点及子节点,采用递归深度优先遍历。
getParentsName(Tree node, boolean includeCurrentNode) 获取所有父节点名称列表

MapUtil

Map相关工具类

方法 介绍
builder() 创建链接调用map
builder(K k, V v) 创建链接调用map
builder(Map<K,V> map) 创建链接调用map
clear(Map... maps) 清除一个或多个Map集合内的元素,每个Map调用clear()方法
createMap(Class<?> mapType) 创建Map
传入抽象MapAbstractMap和Map类将默认创建HashMap
createProxy(Map map) 创建代理Map
MapProxy对Map做一次包装,提供各种getXXX方法
defaultIfEmpty(T map, T defaultMap) 如果给定Map为空,返回默认Map
edit(Map<K,V> map, Editor<Map.Entry<K,V>> editor) 编辑Map
编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
empty() 返回一个空Map
empty(Class<?> mapClass) 根据传入的Map类型不同,返回对应类型的空Map,支持类型包括:
emptyIfNull(Map<K,V> set) 如果提供的集合为null,返回一个不可变的默认空集合,否则返回原集合
空集合使用Collections.emptyMap()
filter(Map<K,V> map, Filter<Map.Entry<K,V>> filter) 过滤
过滤过程通过传入的Editor实现来返回需要的元素内容,这个Filter实现可以实现以下功能:
filter(Map<K,V> map, K... keys) 过滤Map保留指定键值对,如果键不存在跳过
get(Map map, Object key, Class type) 获取Map指定key的值,并转换为指定类型
get(Map map, Object key, Class type, T defaultValue) 获取Map指定key的值,并转换为指定类型
get(Map map, Object key, TypeReference type) 获取Map指定key的值,并转换为指定类型
get(Map map, Object key, TypeReference type, T defaultValue) 获取Map指定key的值,并转换为指定类型
getAny(Map<K,V> map, K... keys) 获取Map的部分key生成新的Map
getBool(Map map, Object key) 获取Map指定key的值,并转换为Bool
getBool(Map map, Object key, Boolean defaultValue) 获取Map指定key的值,并转换为Bool
getChar(Map map, Object key) 获取Map指定key的值,并转换为Character
getChar(Map map, Object key, Character defaultValue) 获取Map指定key的值,并转换为Character
getDate(Map map, Object key) 获取Map指定key的值,并转换为Date
getDate(Map map, Object key, Date defaultValue) 获取Map指定key的值,并转换为Date
getDouble(Map map, Object key) 获取Map指定key的值,并转换为Double
getDouble(Map map, Object key, Double defaultValue) 获取Map指定key的值,并转换为Double
getFloat(Map map, Object key) 获取Map指定key的值,并转换为Float
getFloat(Map map, Object key, Float defaultValue) 获取Map指定key的值,并转换为Float
getInt(Map map, Object key) 获取Map指定key的值,并转换为Integer
getInt(Map map, Object key, Integer defaultValue) 获取Map指定key的值,并转换为Integer
getLong(Map map, Object key) 获取Map指定key的值,并转换为Long
getLong(Map map, Object key, Long defaultValue) 获取Map指定key的值,并转换为Long
getQuietly(Map map, Object key, Class type, T defaultValue) 获取Map指定key的值,并转换为指定类型,此方法在转换失败后不抛异常,返回null。
getQuietly(Map map, Object key, TypeReference type, T defaultValue) 获取Map指定key的值,并转换为指定类型,转换失败后返回null,不抛异常
getShort(Map map, Object key) 获取Map指定key的值,并转换为Short
getShort(Map map, Object key, Short defaultValue) 获取Map指定key的值,并转换为Short
getStr(Map map, Object key) 获取Map指定key的值,并转换为字符串
getStr(Map map, Object key, String defaultValue) 获取Map指定key的值,并转换为字符串
inverse(Map<K,V> map) Map的键和值互换
互换键值对不检查值是否有重复,如果有则后加入的元素替换先加入的元素
值的顺序在HashMap中不确定,所以谁覆盖谁也不确定,在有序的Map中按照先后顺序覆盖,保留最后的值
isEmpty(Map map) Map是否为空
isNotEmpty(Map map) Map是否为非空
join(Map<K,V> map, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 将map转成字符串
join(Map<K,V> map, String separator, String keyValueSeparator, String... otherParams) 将map转成字符串
joinIgnoreNull(Map<K,V> map, String separator, String keyValueSeparator, String... otherParams) 将map转成字符串,忽略null的键和值
newConcurrentHashMap() 新建一个初始容量为DEFAULT_INITIAL_CAPACITY 的ConcurrentHashMap
newConcurrentHashMap(int size) 新建一个ConcurrentHashMap
newConcurrentHashMap(Map<K,V> map) 传入一个Map将其转化为ConcurrentHashMap类型
newHashMap() 新建一个HashMap
newHashMap(boolean isOrder) 新建一个HashMap
newHashMap(int size) 新建一个HashMap
newHashMap(int size, boolean isOrder) 新建一个HashMap
newIdentityMap(int size) 创建键不重复Map
newTreeMap(Comparator<? super K> comparator) 新建TreeMap,Key有序的Map
newTreeMap(Map<K,V> map, Comparator<? super K> comparator) 新建TreeMap,Key有序的Map
of(K key, V value) 将单一键值对转换为Map
of(K key, V value, boolean isOrder) 将单一键值对转换为Map
of(Object[] array) 将数组转换为Map(HashMap),支持数组元素类型为:
of(Pair<K,V>... pairs) 根据给定的Pair数组创建Map对象
removeAny(Map<K,V> map, K... keys) 去掉Map中指定key的键值对,修改原Map
removeNullValue(Map<K,V> map) 去除Map中值为null的键值对
注意:此方法在传入的Map上直接修改。
renameKey(Map<K,V> map, K oldKey, K newKey) 重命名键
实现方式为一处然后重新put,当旧的key不存在直接返回
当新的key存在,抛出IllegalArgumentException 异常
reverse(Map<T,T> map) Map的键和值互换 互换键值对不检查值是否有重复,如果有则后加入的元素替换先加入的元素
值的顺序在HashMap中不确定,所以谁覆盖谁也不确定,在有序的Map中按照先后顺序覆盖,保留最后的值
sort(Map<K,V> map) 排序已有Map,Key有序的Map,使用默认Key排序方式(字母顺序)
sort(Map<K,V> map, Comparator<? super K> comparator) 排序已有Map,Key有序的Map
sortByValue(Map<K,V> map, boolean isDesc) 按照值排序,可选是否倒序
sortJoin(Map params, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 根据参数排序后拼接为字符串,常用于签名
toCamelCaseMap(Map<K,V> map) 将已知Map转换为key为驼峰风格的Map
如果KEY为非String类型,保留原值
toListMap(Iterable<? extends Map<K,V>> mapList) 行转列,合并相同的键,值合并为列表
将Map列表中相同key的值组成列表做为Map的value
是toMapList(Map)的逆方法
比如传入数据:
toMapList(Map<K,? extends Iterable> listMap) 列转行。将Map中值列表分别按照其位置与key组成新的map。
是toListMap(Iterable)的逆方法
比如传入数据:
toObjectArray(Map map) 将键值对转换为二维数组,第一维是key,第二纬是value
unmodifiable(Map<K,V> map) 将对应Map转换为不可修改的Map
wrap(Map<K,V> map) 创建Map包装类MapWrapper
MapWrapper对Map做一次包装

BitStatusUtil

通过位运算表示状态的工具类

参数必须是 偶数大于等于0! 工具实现见博客:https://blog.starxg.com/2020/11/bit-status/

方法 介绍
add(int states, int stat) 增加状态
clear() 清空状态就是0
has(int states, int stat) 判断是否含有状态
remove(int states, int stat) 删除一个状态

MathUtil

数学相关方法工具类

此工具类与NumberUtil属于一类工具,NumberUtil偏向于简单数学计算的封装,MathUtil偏向复杂数学计算

方法 介绍
arrangementCount(int n) 计算排列数,即A(n, n) = n!
arrangementCount(int n, int m) 计算排列数,即A(n, m) = n!/(n-m)!
arrangementSelect(String[] datas) 全排列选择(列表全部参与排列)
arrangementSelect(String[] datas, int m) 排列选择(从列表中选择n个排列)
centToYuan(long cent) 金额分转换为元
combinationCount(int n, int m) 计算组合数,即C(n, m) = n!/((n-m)! * m!)
combinationSelect(String[] datas, int m) 组合选择(从列表中选择n个组合)
yuanToCent(double yuan) 金额元转换为分

Ipv4Util

IPV4地址工具类

方法 介绍
countByIpRange(String fromIp, String toIp) 计算IP区间有多少个IP
countByMaskBit(int maskBit, boolean isAll) 计算子网大小
formatIpBlock(String ip, String mask) 格式化IP段
getBeginIpStr(String ip, int maskBit) 根据 ip/掩码位 计算IP段的起始IP(字符串型) 方法别名:inet_ntoa
getEndIpStr(String ip, int maskBit) 根据 ip/掩码位 计算IP段的终止IP(字符串型)
getMaskBitByMask(String mask) 根据子网掩码转换为掩码位
getMaskByIpRange(String fromIp, String toIp) 根据开始IP与结束IP计算掩码
getMaskByMaskBit(int maskBit) 根据掩码位获取掩码
ipv4ToLong(String strIP) 根据ip地址(xxx.xxx.xxx.xxx)计算出long型的数据 方法别名:inet_aton
isMaskBitValid(int maskBit) 判断掩码位是否合法
isMaskValid(String mask) 判断掩码是否合法
list(String ipRange, boolean isAll) 智能转换IP地址集合
list(String ip, int maskBit, boolean isAll) 根据IP地址、子网掩码获取IP地址区间
list(String ipFrom, String ipTo) 得到IP地址区间
longToIpv4(long longIP) 根据long值获取ip v4地址:xx.xx.xx.xx

NetUtil

网络相关工具

方法 介绍
bigIntegerToIPv6(BigInteger bigInteger) 将大整数转换成ipv6字符串
buildInetSocketAddress(String host, int defaultPort) 构建InetSocketAddress
当host中包含端口时(用“:”隔开),使用host中的端口,否则使用默认端口
给定host为空时使用本地host(127.0.0.1)
createAddress(String host, int port) 创建 InetSocketAddress
getDnsInfo(String hostName, String... attrNames) 获取DNS信息,如TXT信息:
NetUtil.attrNames("hutool.cn", "TXT")
getHardwareAddress(InetAddress inetAddress) 获得指定地址信息中的硬件地址
getIpByHost(String hostName) 通过域名得到IP
getLocalHardwareAddress() 获得本机物理地址
getLocalhost() 获取本机网卡IP地址,规则如下:
getLocalHostName() 获取主机名称,一次获取会缓存名称
getLocalhostStr() 获取本机网卡IP地址,这个地址为所有网卡中非回路地址的第一个
如果获取失败调用 InetAddress.getLocalHost()方法获取。
此方法不会抛出异常,获取失败将返回null
getLocalMacAddress() 获得本机MAC地址
getMacAddress(InetAddress inetAddress) 获得指定地址信息中的MAC地址,使用分隔符“-”
getMacAddress(InetAddress inetAddress, String separator) 获得指定地址信息中的MAC地址
getMultistageReverseProxyIp(String ip) 从多级反向代理中获得第一个非unknown IP地址
getNetworkInterface(String name) 获取指定名称的网卡信息
getNetworkInterfaces() 获取本机所有网卡
getUsableLocalPort() 查找1024~65535范围内的可用端口
此方法只检测给定范围内的随机一个端口,检测65535-1024次
来自org.springframework.util.SocketUtils
getUsableLocalPort(int minPort) 查找指定范围内的可用端口,最大值为65535
此方法只检测给定范围内的随机一个端口,检测65535-minPort次
来自org.springframework.util.SocketUtils
getUsableLocalPort(int minPort, int maxPort) 查找指定范围内的可用端口
此方法只检测给定范围内的随机一个端口,检测maxPort-minPort次
来自org.springframework.util.SocketUtils
getUsableLocalPorts(int numRequested, int minPort, int maxPort) 获取多个本地可用端口
来自org.springframework.util.SocketUtils
hideIpPart(long ip) 隐藏掉IP地址的最后一部分为 * 代替
hideIpPart(String ip) 隐藏掉IP地址的最后一部分为 * 代替
idnToASCII(String unicode) Unicode域名转puny code
ipv4ToLong(String strIP) 根据ip地址计算出long型的数据
ipv6ToBitInteger(String IPv6Str) 将IPv6地址字符串转为大整数
isInnerIP(String ipAddress) 判定是否为内网IP
私有IP:A类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然,还有127这个网段是环回地址
isInRange(String ip, String cidr) 是否在CIDR规则配置范围内
方法来自:【成都】小邓
isOpen(InetSocketAddress address, int timeout) 检查远程端口是否开启
isUnknown(String checkString) 检测给定字符串是否为未知,多用于检测HTTP请求相关
isUsableLocalPort(int port) 检测本地端口可用性
来自org.springframework.util.SocketUtils
isValidPort(int port) 是否为有效的端口
此方法并不检查端口是否被占用
localAddressList(Filter addressFilter) 获取所有满足过滤条件的本地IP地址对象
localIps() 获得本机的IP地址列表(包括Ipv4和Ipv6)
返回的IP列表有序,按照系统设备顺序
localIpv4s() 获得本机的IPv4地址列表
返回的IP列表有序,按照系统设备顺序
localIpv6s() 获得本机的IPv6地址列表
返回的IP列表有序,按照系统设备顺序
longToIpv4(long longIP) 根据long值获取ip v4地址
netCat(String host, int port, boolean isBlock, ByteBuffer data) 简易的使用Socket发送数据
netCat(String host, int port, byte[] data) 使用普通Socket发送数据
parseCookies(String cookieStr) 解析Cookie信息
ping(String ip) 检测IP地址是否能ping通
ping(String ip, int timeout) 检测IP地址是否能ping通
setGlobalAuthenticator(Authenticator authenticator) 设置全局验证
setGlobalAuthenticator(String user, char[] pass) 设置全局验证
toAbsoluteUrl(String absoluteBasePath, String relativePath) 相对URL转换为绝对URL
toIpList(Set addressList) 地址列表转换为IP地址列表

SSLUtil

SSL(Secure Sockets Layer 安全套接字协议)相关工具封装

方法 介绍
createSSLContext(String protocol) 创建SSLContext,默认新人全部
createSSLContext(String protocol, KeyManager[] keyManagers, TrustManager[] trustManagers) 创建和初始化SSLContext
createSSLContext(String protocol, KeyManager keyManager, TrustManager trustManager) 创建SSLContext

URLEncodeUtil

URL编码工具

方法 介绍
encode(String url) 编码URL,默认使用UTF-8编码
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于URL自动编码,类似于浏览器中键入地址自动编码,对于像类似于“/”的字符不再编码
encode(String url, Charset charset) 编码字符为 application/x-www-form-urlencoded
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于URL自动编码,类似于浏览器中键入地址自动编码,对于像类似于“/”的字符不再编码
encodeAll(String url) 编码URL,默认使用UTF-8编码
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
encodeAll(String url, Charset charset) 编码URL
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
encodeFragment(String url) 编码URL,默认使用UTF-8编码
URL的Fragment URLEncoder
默认的编码器针对Fragment,定义如下:
encodeFragment(String url, Charset charset) URL的Fragment URLEncoder
默认的编码器针对Fragment,定义如下:
encodePathSegment(String url) 编码URL,默认使用UTF-8编码
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于URL的Segment中自动编码,转义大部分特殊字符
encodePathSegment(String url, Charset charset) 编码字符为URL中查询语句
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于URL的Segment中自动编码,转义大部分特殊字符
encodeQuery(String url) 编码URL,默认使用UTF-8编码
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于POST请求中的请求体自动编码,转义大部分特殊字符
encodeQuery(String url, Charset charset) 编码字符为URL中查询语句
将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。
此方法用于POST请求中的请求体自动编码,转义大部分特殊字符

CollectorUtil

可变的汇聚操作Collector 相关工具封装

方法 介绍
joining(CharSequence delimiter) 提供任意对象的Join操作的Collector实现,对象默认调用toString方法
joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix, Function<T,? extends CharSequence> toStringFunc) 提供任意对象的Join操作的Collector实现
joining(CharSequence delimiter, Function<T,? extends CharSequence> toStringFunc) 提供任意对象的Join操作的Collector实现

StreamUtil

Stream 工具类

方法 介绍
join(Stream stream, CharSequence delimiter) 将Stream中所有元素以指定分隔符,合并为一个字符串,对象默认调用toString方法
join(Stream stream, CharSequence delimiter, Function<T,? extends CharSequence> toStringFunc) 将Stream中所有元素以指定分隔符,合并为一个字符串
of(File file) 按行读取文件为Stream
of(File file, Charset charset) 按行读取文件为Stream
of(Iterable iterable) Iterable转换为Stream,默认非并行
of(Iterable iterable, boolean parallel) Iterable转换为Stream
of(Path path) 按行读取文件为Stream
of(Path path, Charset charset) 按行读取文件为Stream
of(T... array)
of(T seed, UnaryOperator elementCreator, int limit) 通过函数创建Stream

DesktopUtil

桌面相关工具(平台相关)

Desktop 类允许 Java 应用程序启动已在本机桌面上注册的关联应用程序,以处理 URI 或文件。

方法 介绍
browse(String url) 使用平台默认浏览器打开指定URL地址
browse(URI uri) 使用平台默认浏览器打开指定URI地址
edit(File file) 启动关联编辑器应用程序并打开用于编辑的文件
getDsktop() 获得Desktop
mail(String mailAddress) 使用平台默认浏览器打开指定URL地址
open(File file) 启动关联应用程序来打开文件
print(File file) 使用关联应用程序的打印命令, 用本机桌面打印设备来打印文件

RobotUtil

Robot 封装工具类,提供截屏等工具

方法 介绍
captureScreen() 截取全屏
captureScreen(File outFile) 截取全屏到文件
captureScreen(Rectangle screenRect) 截屏
captureScreen(Rectangle screenRect, File outFile) 截屏
click() 模拟单击
鼠标单击包括鼠标左键的按下和释放
delay() 等待指定毫秒数
getDelay() 获取全局默认的延迟时间
getRobot() 获取 Robot 单例实例
keyClick(int... keyCodes) 模拟键盘点击
包括键盘的按下和释放
keyPressString(String str) 打印输出指定字符串(借助剪贴板)
keyPressWithAlt(int key) alt+ 按键
keyPressWithCtrl(int key) ctrl+ 按键
keyPressWithShift(int key) shift+ 按键
mouseMove(int x, int y) 模拟鼠标移动
mouseWheel(int wheelAmt) 模拟鼠标滚轮滚动
rightClick() 模拟右键单击
鼠标单击包括鼠标右键的按下和释放
setDelay(int delayMillis) 设置默认的延迟时间
当按键执行完后的等待时间,也可以用ThreadUtil.sleep方法代替

ScreenUtil

屏幕相关(当前显示设置)工具类

方法 介绍
captureScreen() 截取全屏
captureScreen(File outFile) 截取全屏到文件
captureScreen(Rectangle screenRect) 截屏
captureScreen(Rectangle screenRect, File outFile) 截屏
getHeight() 获取屏幕高度
getRectangle() 获取屏幕的矩形
getWidth() 获取屏幕宽度

ClipboardUtil

系统剪贴板工具类

方法 介绍
get(DataFlavor flavor) 获取剪贴板内容
get(Transferable content, DataFlavor flavor) 获取剪贴板内容
getClipboard() 获取系统剪贴板
getImage() 从剪贴板获取图片
getImage(Transferable content) 从剪贴板的Transferable获取图片
getStr() 从剪贴板获取文本
getStr(Transferable content) 从剪贴板的Transferable获取文本
listen(ClipboardListener listener) 监听剪贴板修改事件
listen(ClipboardListener listener, boolean sync) 监听剪贴板修改事件
listen(int tryCount, long delay, ClipboardListener listener, boolean sync) 监听剪贴板修改事件
set(Transferable contents) 设置内容到剪贴板
set(Transferable contents, ClipboardOwner owner) 设置内容到剪贴板
setImage(Image image) 设置图片到剪贴板
setStr(String text) 设置字符串文本到剪贴板

CharSequenceUtil

CharSequence 相关工具类封装

方法 介绍
addPrefixIfNot(CharSequence str, CharSequence prefix) 如果给定字符串不是以prefix开头的,在开头补充 prefix
addSuffixIfNot(CharSequence str, CharSequence suffix) 如果给定字符串不是以suffix结尾的,在尾部补充 suffix
appendIfMissing(CharSequence str, CharSequence suffix, boolean ignoreCase, CharSequence... testSuffixes) 如果给定字符串不是以给定的一个或多个字符串为结尾,则在尾部添加结尾字符串
appendIfMissing(CharSequence str, CharSequence suffix, CharSequence... suffixes) 如果给定字符串不是以给定的一个或多个字符串为结尾,则在尾部添加结尾字符串
不忽略大小写
appendIfMissingIgnoreCase(CharSequence str, CharSequence suffix, CharSequence... suffixes) 如果给定字符串不是以给定的一个或多个字符串为结尾,则在尾部添加结尾字符串
忽略大小写
blankToDefault(CharSequence str, String defaultStr) 如果字符串是null或者""或者空白,则返回指定默认字符串,否则返回字符串本身。
brief(CharSequence str, int maxLength) 将给定字符串,变成 "xxx...xxx" 形式的字符串 abcdef 5 -》 a...f abcdef 4 -》 a..f abcdef 3 -》 a.f abcdef 2 -》 a. abcdef 1 -》 a
builder(CharSequence... strs) 创建StringBuilder对象
byteBuffer(CharSequence str, String charset) 字符串转换为byteBuffer
byteLength(CharSequence cs, Charset charset) 给定字符串转为bytes后的byte数(byte长度)
bytes(CharSequence str) 编码字符串
使用系统默认编码
bytes(CharSequence str, Charset charset) 编码字符串
bytes(CharSequence str, String charset) 编码字符串
center(CharSequence str, int size) 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串
center(CharSequence str, int size, char padChar) 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串
center(CharSequence str, int size, CharSequence padStr) 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串
cleanBlank(CharSequence str) 清理空白字符
compare(CharSequence str1, CharSequence str2, boolean nullIsLess) 比较两个字符串,用于排序
compareIgnoreCase(CharSequence str1, CharSequence str2, boolean nullIsLess) 比较两个字符串,用于排序,大小写不敏感
compareVersion(CharSequence version1, CharSequence version2) 比较两个版本
null版本排在最小:即:
concat(boolean isNullToEmpty, CharSequence... strs) 连接多个字符串为一个
contains(CharSequence str, char searchChar) 指定字符是否在字符串中出现过
contains(CharSequence str, CharSequence searchStr) 指定字符串是否在字符串中出现过
containsAny(CharSequence str, char... testChars) 查找指定字符串是否包含指定字符列表中的任意一个字符
containsAny(CharSequence str, CharSequence... testStrs) 查找指定字符串是否包含指定字符串列表中的任意一个字符串
containsAnyIgnoreCase(CharSequence str, CharSequence... testStrs) 查找指定字符串是否包含指定字符串列表中的任意一个字符串
忽略大小写
containsBlank(CharSequence str) 给定字符串是否包含空白符(空白符包括空格、制表符、全角空格和不间断空格)
如果给定字符串为null或者"",则返回false
containsIgnoreCase(CharSequence str, CharSequence testStr) 是否包含特定字符,忽略大小写,如果给定两个参数都为null,返回true
containsOnly(CharSequence str, char... testChars) 检查指定字符串中是否只包含给定的字符
count(CharSequence content, char charForSearch) 统计指定内容中包含指定字符的数量
count(CharSequence content, CharSequence strForSearch) 统计指定内容中包含指定字符串的数量
参数为 null 或者 "" 返回 0.
cut(CharSequence str, int partLength) 将字符串切分为N等份
desensitized(CharSequence str, DesensitizedUtil.DesensitizedType desensitizedType) 脱敏,使用默认的脱敏策略
emptyIfNull(CharSequence str) 当给定字符串为null时,转换为Empty
emptyToDefault(CharSequence str, String defaultStr) 如果字符串是null或者"",则返回指定默认字符串,否则返回字符串本身。
emptyToNull(CharSequence str) 当给定字符串为空字符串时,转换为null
endWith(CharSequence str, char c) 字符串是否以给定字符结尾
endWith(CharSequence str, CharSequence suffix) 是否以指定字符串结尾
endWith(CharSequence str, CharSequence suffix, boolean isIgnoreCase) 是否以指定字符串结尾
如果给定的字符串和开头字符串都为null则返回true,否则任意一个值为null返回false
endWithAny(CharSequence str, CharSequence... suffixes) 给定字符串是否以任何一个字符串结尾
给定字符串和数组为空都返回false
endWithAnyIgnoreCase(CharSequence str, CharSequence... suffixes) 给定字符串是否以任何一个字符串结尾(忽略大小写)
给定字符串和数组为空都返回false
endWithIgnoreCase(CharSequence str, CharSequence suffix) 是否以指定字符串结尾,忽略大小写
equals(CharSequence str1, CharSequence str2) 比较两个字符串(大小写敏感)。
equals(CharSequence str1, CharSequence str2, boolean ignoreCase) 比较两个字符串是否相等。
equalsAny(CharSequence str1, boolean ignoreCase, CharSequence... strs) 给定字符串是否与提供的中任一字符串相同,相同则返回true,没有相同的返回false
如果参与比对的字符串列表为空,返回false
equalsAny(CharSequence str1, CharSequence... strs) 给定字符串是否与提供的中任一字符串相同,相同则返回true,没有相同的返回false
如果参与比对的字符串列表为空,返回false
equalsAnyIgnoreCase(CharSequence str1, CharSequence... strs) 给定字符串是否与提供的中任一字符串相同(忽略大小写),相同则返回true,没有相同的返回false
如果参与比对的字符串列表为空,返回false
equalsCharAt(CharSequence str, int position, char c) 字符串指定位置的字符是否与给定字符相同
如果字符串为null,返回false
如果给定的位置大于字符串长度,返回false
如果给定的位置小于0,返回false
equalsIgnoreCase(CharSequence str1, CharSequence str2) 比较两个字符串(大小写不敏感)。
filter(CharSequence str, Filter filter) 过滤字符串
firstNonBlank(T... strs) 返回第一个非blank 元素
firstNonEmpty(T... strs) 返回第一个非empty 元素
firstNonNull(T... strs) 返回第一个非null 元素
format(CharSequence template, Object... params) 格式化文本, {} 表示占位符
此方法只是简单将占位符 {} 按照顺序替换为参数
如果想输出 {} 使用 \转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\ 即可
例:
通常使用:format("this is {} for {}", "a", "b") =》 this is a for b
转义{}: format("this is \{} for {}", "a", "b") =》 this is {} for a
转义\: format("this is \\{} for {}", "a", "b") =》 this is \a for b
genGetter(CharSequence fieldName) 生成get方法名
genSetter(CharSequence fieldName) 生成set方法名
例如:name 返回 setName
getContainsStr(CharSequence str, CharSequence... testStrs) 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串
getContainsStrIgnoreCase(CharSequence str, CharSequence... testStrs) 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串
忽略大小写
getGeneralField(CharSequence getOrSetMethodName) 获得set或get或is方法对应的标准属性名
例如:setName 返回 name
hasBlank(CharSequence... strs) 指定字符串数组中,是否包含空字符串。
hasEmpty(CharSequence... strs) 是否包含空字符串。
hide(CharSequence str, int startInclude, int endExclude) 替换指定字符串的指定区间内字符为"*" 俗称:脱敏功能,后面其他功能,可以见:DesensitizedUtil(脱敏工具类)
indexedFormat(CharSequence pattern, Object... arguments) 有序的格式化文本,使用{number}做为占位符
通常使用:format("this is {0} for {1}", "a", "b") =》 this is a for b
indexOf(CharSequence str, char searchChar) 指定范围内查找指定字符
indexOf(CharSequence str, char searchChar, int start) 指定范围内查找指定字符
indexOf(CharSequence str, char searchChar, int start, int end) 指定范围内查找指定字符
indexOf(CharSequence str, CharSequence searchStr, int fromIndex, boolean ignoreCase) 指定范围内查找字符串
indexOfIgnoreCase(CharSequence str, CharSequence searchStr) 指定范围内查找字符串,忽略大小写
indexOfIgnoreCase(CharSequence str, CharSequence searchStr, int fromIndex) 指定范围内查找字符串
isAllBlank(CharSequence... strs) 指定字符串数组中的元素,是否全部为空字符串。
isAllCharMatch(CharSequence value, Matcher matcher) 字符串的每一个字符是否都与定义的匹配器匹配
isAllEmpty(CharSequence... strs) 指定字符串数组中的元素,是否全部为空字符串。
isAllNotBlank(CharSequence... args) 是否存都不为null或空对象或空白符的对象,通过hasBlank(CharSequence...) 判断元素
isAllNotEmpty(CharSequence... args) 指定字符串数组中的元素,是否都不为空字符串。
isBlank(CharSequence str) 字符串是否为空白,空白的定义如下:
isBlankOrUndefined(CharSequence str) 检查字符串是否为null、空白串、“null”、“undefined”
isCharEquals(String str) 检查给定字符串的所有字符是否都一样
isEmpty(CharSequence str) 字符串是否为空,空的定义如下:
isEmptyOrUndefined(CharSequence str) 检查字符串是否为null、“”、“null”、“undefined”
isLowerCase(CharSequence str) 给定字符串中的字母是否全部为小写,判断依据如下:
isNotBlank(CharSequence str) 字符串是否为非空白,非空白的定义如下:
isNotEmpty(CharSequence str) 字符串是否为非空白,非空白的定义如下:
isNullOrUndefined(CharSequence str) 检查字符串是否为null、“null”、“undefined”
isNumeric(CharSequence str) 检查字符串是否都为数字组成
isSubEquals(CharSequence str1, int start1, CharSequence str2, int start2, int length, boolean ignoreCase) 截取两个字符串的不同部分(长度一致),判断截取的子串是否相同
任意一个字符串为null返回false
isSurround(CharSequence str, char prefix, char suffix) 给定字符串是否被字符包围
isSurround(CharSequence str, CharSequence prefix, CharSequence suffix) 给定字符串是否被字符包围
isUpperCase(CharSequence str) 给定字符串中的字母是否全部为大写,判断依据如下:
isWrap(CharSequence str, char wrapper) 指定字符串是否被同一字符包装(前后都有这些字符串)
isWrap(CharSequence str, char prefixChar, char suffixChar) 指定字符串是否被包装
isWrap(CharSequence str, String wrapper) 指定字符串是否被同一字符包装(前后都有这些字符串)
isWrap(CharSequence str, String prefix, String suffix) 指定字符串是否被包装
join(CharSequence conjunction, Iterable iterable) 以 conjunction 为分隔符将多个对象转换为字符串
join(CharSequence conjunction, Object... objs) 以 conjunction 为分隔符将多个对象转换为字符串
lastIndexOf(CharSequence str, CharSequence searchStr, int fromIndex, boolean ignoreCase) 指定范围内查找字符串
fromIndex 为搜索起始位置,从后往前计数
lastIndexOfIgnoreCase(CharSequence str, CharSequence searchStr) 指定范围内查找字符串,忽略大小写
lastIndexOfIgnoreCase(CharSequence str, CharSequence searchStr, int fromIndex) 指定范围内查找字符串,忽略大小写
fromIndex 为搜索起始位置,从后往前计数
length(CharSequence cs) 获取字符串的长度,如果为null返回0
lowerFirst(CharSequence str) 小写首字母
例如:str = Name, return name
maxLength(CharSequence string, int length) 限制字符串长度,如果超过指定长度,截取指定长度并在末尾加"..."
move(CharSequence str, int startInclude, int endExclude, int moveLength) 循环位移指定位置的字符串为指定距离
当moveLength大于0向右位移,小于0向左位移,0不位移
当moveLength大于字符串长度时采取循环位移策略,即位移到头后从头(尾)位移,例如长度为10,位移13则表示位移3
nullToDefault(CharSequence str, String defaultStr) 如果字符串是 null,则返回指定默认字符串,否则返回字符串本身。
nullToEmpty(CharSequence str) 当给定字符串为null时,转换为Empty
ordinalIndexOf(CharSequence str, CharSequence searchStr, int ordinal) 返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置。
padAfter(CharSequence str, int length, char padChar) 补充字符串以满足最小长度,如果提供的字符串大于指定长度,截断之
padAfter(CharSequence str, int length, CharSequence padStr) 补充字符串以满足最小长度
padPre(CharSequence str, int length, char padChar) 补充字符串以满足最小长度,如果提供的字符串大于指定长度,截断之 同:leftPad (org.apache.commons.lang3.leftPad)
padPre(CharSequence str, int length, CharSequence padStr) 补充字符串以满足指定长度,如果提供的字符串大于指定长度,截断之 同:leftPad (org.apache.commons.lang3.leftPad)
prependIfMissing(CharSequence str, CharSequence prefix, boolean ignoreCase, CharSequence... prefixes) 如果给定字符串不是以给定的一个或多个字符串为开头,则在首部添加起始字符串
prependIfMissing(CharSequence str, CharSequence prefix, CharSequence... prefixes) 如果给定字符串不是以给定的一个或多个字符串为开头,则在首部添加起始字符串
不忽略大小写
prependIfMissingIgnoreCase(CharSequence str, CharSequence prefix, CharSequence... prefixes) 如果给定字符串不是以给定的一个或多个字符串为开头,则在首部添加起始字符串
忽略大小写
removeAll(CharSequence str, char... chars) 去除字符串中指定的多个字符,如有多个则全部去除
removeAll(CharSequence str, CharSequence strToRemove) 移除字符串中所有给定字符串
例:removeAll("aa-bb-cc-dd", "-") =》 aabbccdd
removeAllLineBreaks(CharSequence str) 去除所有换行符,包括:
removeAny(CharSequence str, CharSequence... strsToRemove) 移除字符串中所有给定字符串,当某个字符串出现多次,则全部移除
例:removeAny("aa-bb-cc-dd", "a", "b") =》 --cc-dd
removePreAndLowerFirst(CharSequence str, CharSequence prefix) 去掉首部指定长度的字符串并将剩余字符串首字母小写
例如:str=setName, prefix=set =》 return name
removePreAndLowerFirst(CharSequence str, int preLength) 去掉首部指定长度的字符串并将剩余字符串首字母小写
例如:str=setName, preLength=3 =》 return name
removePrefix(CharSequence str, CharSequence prefix) 去掉指定前缀
removePrefixIgnoreCase(CharSequence str, CharSequence prefix) 忽略大小写去掉指定前缀
removeSufAndLowerFirst(CharSequence str, CharSequence suffix) 去掉指定后缀,并小写首字母
removeSuffix(CharSequence str, CharSequence suffix) 去掉指定后缀
removeSuffixIgnoreCase(CharSequence str, CharSequence suffix) 忽略大小写去掉指定后缀
repeat(char c, int count) 重复某个字符
repeat(CharSequence str, int count) 重复某个字符串
repeatAndJoin(CharSequence str, int count, CharSequence conjunction) 重复某个字符串并通过分界符连接
repeatByLength(CharSequence str, int padLen) 重复某个字符串到指定长度
replace(CharSequence str, CharSequence searchStr, CharSequence replacement) 替换字符串中的指定字符串
replace(CharSequence str, CharSequence searchStr, CharSequence replacement, boolean ignoreCase) 替换字符串中的指定字符串
replace(CharSequence str, int fromIndex, CharSequence searchStr, CharSequence replacement, boolean ignoreCase) 替换字符串中的指定字符串
replace(CharSequence str, int startInclude, int endExclude, char replacedChar) 替换指定字符串的指定区间内字符为固定字符
replace(CharSequence str, Pattern pattern, Func1<Matcher,String> replaceFun) 替换所有正则匹配的文本,并使用自定义函数决定如何替换
replaceFun可以通过Matcher提取出匹配到的内容的不同部分,然后经过重新处理、组装变成新的内容放回原位。
replace(this.content, "(\d+)", parameters -> "-" + parameters.group(1) + "-") // 结果为:"ZZZaaabbbccc中文-1234-"
replace(CharSequence str, String regex, Func1<Matcher,String> replaceFun) 替换所有正则匹配的文本,并使用自定义函数决定如何替换
replaceChars(CharSequence str, char[] chars, CharSequence replacedStr) 替换字符字符数组中所有的字符为replacedStr
replaceChars(CharSequence str, String chars, CharSequence replacedStr) 替换字符字符数组中所有的字符为replacedStr
提供的chars为所有需要被替换的字符,例如:"\r\n",则"\r"和"\n"都会被替换,哪怕他们单独存在
replaceIgnoreCase(CharSequence str, CharSequence searchStr, CharSequence replacement) 替换字符串中的指定字符串,忽略大小写
split(CharSequence str, char separator) 切分字符串
a#b#c =》 [a,b,c]
a##b#c =》 [a,"",b,c]
split(CharSequence str, char separator, boolean isTrim, boolean ignoreEmpty) 切分字符串,不限制分片数量
split(CharSequence str, char separator, int limit) 切分字符串,不去除切分后每个元素两边的空白符,不去除空白项
split(CharSequence str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) 切分字符串
split(CharSequence str, char separator, int limit, boolean ignoreEmpty, Function<String,R> mapping) 切分字符串
split(CharSequence str, CharSequence separator) 切分字符串,如果分隔符不存在则返回原字符串
split(CharSequence str, CharSequence separator, boolean isTrim, boolean ignoreEmpty) 切分字符串
split(CharSequence str, CharSequence separator, int limit, boolean isTrim, boolean ignoreEmpty) 切分字符串
split(CharSequence str, int len) 根据给定长度,将给定字符串截取为多个部分
splitToArray(CharSequence str, char separator) 切分字符串
splitToArray(CharSequence text, char separator, int limit) 切分字符串
splitToArray(CharSequence str, CharSequence separator) 切分字符串,如果分隔符不存在则返回原字符串
splitToInt(CharSequence str, char separator) 切分字符串为int数组
splitToInt(CharSequence str, CharSequence separator) 切分字符串为int数组
splitToLong(CharSequence str, char separator) 切分字符串为long数组
splitToLong(CharSequence str, CharSequence separator) 切分字符串为long数组
splitTrim(CharSequence str, char separator) 切分字符串,去除切分后每个元素两边的空白符,去除空白项
splitTrim(CharSequence str, char separator, int limit) 切分字符串,去除切分后每个元素两边的空白符,去除空白项
splitTrim(CharSequence str, CharSequence separator) 切分字符串,去除切分后每个元素两边的空白符,去除空白项
splitTrim(CharSequence str, CharSequence separator, int limit) 切分字符串,去除切分后每个元素两边的空白符,去除空白项
startWith(CharSequence str, char c) 字符串是否以给定字符开始
startWith(CharSequence str, CharSequence prefix) 是否以指定字符串开头
startWith(CharSequence str, CharSequence prefix, boolean ignoreCase) 是否以指定字符串开头
如果给定的字符串和开头字符串都为null则返回true,否则任意一个值为null返回false
startWith(CharSequence str, CharSequence prefix, boolean ignoreCase, boolean ignoreEquals) 是否以指定字符串开头
如果给定的字符串和开头字符串都为null则返回true,否则任意一个值为null返回false
startWithAny(CharSequence str, CharSequence... prefixes) 给定字符串是否以任何一个字符串开始
给定字符串和数组为空都返回false
startWithIgnoreCase(CharSequence str, CharSequence prefix) 是否以指定字符串开头,忽略大小写
startWithIgnoreEquals(CharSequence str, CharSequence prefix) 是否以指定字符串开头,忽略相等字符串的情况
str(CharSequence cs) CharSequence 转为字符串,null安全
strBuilder(CharSequence... strs) 创建StrBuilder对象
strip(CharSequence str, CharSequence prefixOrSuffix) 去除两边的指定字符串
strip(CharSequence str, CharSequence prefix, CharSequence suffix) 去除两边的指定字符串
stripIgnoreCase(CharSequence str, CharSequence prefixOrSuffix) 去除两边的指定字符串,忽略大小写
stripIgnoreCase(CharSequence str, CharSequence prefix, CharSequence suffix) 去除两边的指定字符串,忽略大小写
sub(CharSequence str, int fromIndexInclude, int toIndexExclude) 改进JDK subString
index从0开始计算,最后一个字符为-1
如果from和to位置一样,返回 ""
如果from或to为负数,则按照length从后向前数位置,如果绝对值大于字符串长度,则from归到0,to归到length
如果经过修正的index中from大于to,则互换from和to example:
abcdefgh 2 3 =》 c
abcdefgh 2 -3 =》 cde
subAfter(CharSequence string, char separator, boolean isLastSeparator) 截取分隔字符串之后的字符串,不包括分隔字符串
如果给定的字符串为空串(null或""),返回原字符串
如果分隔字符串为空串(null或""),则返回空串,如果分隔字符串未找到,返回空串,举例如下:
subAfter(CharSequence string, CharSequence separator, boolean isLastSeparator) 截取分隔字符串之后的字符串,不包括分隔字符串
如果给定的字符串为空串(null或""),返回原字符串
如果分隔字符串为空串(null或""),则返回空串,如果分隔字符串未找到,返回空串,举例如下:
subBefore(CharSequence string, char separator, boolean isLastSeparator) 截取分隔字符串之前的字符串,不包括分隔字符串
如果给定的字符串为空串(null或"")或者分隔字符串为null,返回原字符串
如果分隔字符串未找到,返回原字符串,举例如下:
subBefore(CharSequence string, CharSequence separator, boolean isLastSeparator) 截取分隔字符串之前的字符串,不包括分隔字符串
如果给定的字符串为空串(null或"")或者分隔字符串为null,返回原字符串
如果分隔字符串为空串"",则返回空串,如果分隔字符串未找到,返回原字符串,举例如下:
subBetween(CharSequence str, CharSequence beforeAndAfter) 截取指定字符串中间部分,不包括标识字符串
subBetween(CharSequence str, CharSequence before, CharSequence after) 截取指定字符串中间部分,不包括标识字符串
subBetweenAll(CharSequence str, CharSequence prefixAndSuffix) 截取指定字符串多段中间部分,不包括标识字符串
subBetweenAll(CharSequence str, CharSequence prefix, CharSequence suffix) 截取指定字符串多段中间部分,不包括标识字符串
subByCodePoint(CharSequence str, int fromIndex, int toIndex) 通过CodePoint截取字符串,可以截断Emoji
subPre(CharSequence string, int toIndexExclude) 切割指定位置之前部分的字符串
subPreGbk(CharSequence str, int len, CharSequence suffix) 截取部分字符串,这里一个汉字的长度认为是2
subSuf(CharSequence string, int fromIndex) 切割指定位置之后部分的字符串
subSufByLength(CharSequence string, int length) 切割指定长度的后部分的字符串
subWithLength(String input, int fromIndex, int length) 截取字符串,从指定位置开始,截取指定长度的字符串
author weibaohui
swapCase(String str) 切换给定字符串中的大小写。大写转小写,小写转大写。
toCamelCase(CharSequence name) 将下划线方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
例如:hello_world=》helloWorld
toSymbolCase(CharSequence str, char symbol) 将驼峰式命名的字符串转换为使用符号连接方式。如果转换前的驼峰式命名的字符串为空,则返回空字符串。
totalLength(CharSequence... strs) 给定字符串数组的总长度
null字符长度定义为0
toUnderlineCase(CharSequence str) 将驼峰式命名的字符串转换为下划线方式。如果转换前的驼峰式命名的字符串为空,则返回空字符串。
例如:
trim(CharSequence str) 除去字符串头尾部的空白,如果字符串是null,依然返回null。
trim(CharSequence str, int mode) 除去字符串头尾部的空白符,如果字符串是null,依然返回null。
trim(CharSequence str, int mode, Predicate predicate) 按照断言,除去字符串头尾部的断言为真的字符,如果字符串是null,依然返回null。
trimEnd(CharSequence str) 除去字符串尾部的空白,如果字符串是null,则返回null。
trimStart(CharSequence str) 除去字符串头部的空白,如果字符串是null,则返回null。
trimToEmpty(CharSequence str) 除去字符串头尾部的空白,如果字符串是null,返回""。
trimToNull(CharSequence str) 除去字符串头尾部的空白,如果字符串是null或者"",返回null。
unWrap(CharSequence str, char prefixAndSuffix) 去掉字符包装,如果未被包装则返回原字符串
unWrap(CharSequence str, char prefix, char suffix) 去掉字符包装,如果未被包装则返回原字符串
unWrap(CharSequence str, String prefix, String suffix) 去掉字符包装,如果未被包装则返回原字符串
upperFirst(CharSequence str) 大写首字母
例如:str = name, return Name
upperFirstAndAddPre(CharSequence str, String preString) 原字符串首字母大写并在其首部添加指定字符串 例如:str=name, preString=get =》 return getName
utf8Bytes(CharSequence str) 编码字符串,编码为UTF-8
wrap(CharSequence str, CharSequence prefixAndSuffix) 包装指定字符串
当前缀和后缀一致时使用此方法
wrap(CharSequence str, CharSequence prefix, CharSequence suffix) 包装指定字符串
wrapAll(CharSequence prefix, CharSequence suffix, CharSequence... strs) 包装多个字符串
wrapAllIfMissing(CharSequence prefix, CharSequence suffix, CharSequence... strs) 包装多个字符串,如果已经包装,则不再包装
wrapAllWithPair(CharSequence prefixAndSuffix, CharSequence... strs) 使用单个字符包装多个字符串
wrapAllWithPairIfMissing(CharSequence prefixAndSuffix, CharSequence... strs) 使用成对的字符包装多个字符串,如果已经包装,则不再包装
wrapIfMissing(CharSequence str, CharSequence prefix, CharSequence suffix) 包装指定字符串,如果前缀或后缀已经包含对应的字符串,则不再包装

UnicodeUtil

提供Unicode字符串和普通字符串之间的转换

方法 介绍
toString(String unicode) Unicode字符串转为普通字符串
Unicode字符串的表现方式为:\uXXXX
toUnicode(char c) 字符编码为Unicode形式
toUnicode(int c) 字符编码为Unicode形式
toUnicode(String str) 字符串编码为Unicode形式
toUnicode(String str, boolean isSkipAscii) 字符串编码为Unicode形式

CsvUtil

CSV写出配置项

方法 介绍
getReader() 获取CSV读取器,调用此方法创建的Reader须自行指定读取的资源
getReader(CsvReadConfig config) 获取CSV读取器,调用此方法创建的Reader须自行指定读取的资源
getReader(Reader reader) 获取CSV读取器
getReader(Reader reader, CsvReadConfig config) 获取CSV读取器
getWriter(File file, Charset charset) 获取CSV生成器(写出器),使用默认配置,覆盖已有文件(如果存在)
getWriter(File file, Charset charset, boolean isAppend) 获取CSV生成器(写出器),使用默认配置
getWriter(File file, Charset charset, boolean isAppend, CsvWriteConfig config) 获取CSV生成器(写出器)
getWriter(String filePath, Charset charset) 获取CSV生成器(写出器),使用默认配置,覆盖已有文件(如果存在)
getWriter(String filePath, Charset charset, boolean isAppend) 获取CSV生成器(写出器),使用默认配置
getWriter(Writer writer) 获取CSV生成器(写出器)
getWriter(Writer writer, CsvWriteConfig config) 获取CSV生成器(写出器)

ThreadUtil

线程池工具

方法 介绍
concurrencyTest(int threadSize, Runnable runnable) 并发测试
此方法用于测试多线程下执行某些逻辑的并发性能
调用此方法会导致当前线程阻塞。
结束后可调用ConcurrencyTester.getInterval() 方法获取执行时间
createScheduledExecutor(int corePoolSize) 创建ScheduledThreadPoolExecutor
createThreadFactoryBuilder() 创建ThreadFactoryBuilder
createThreadLocal(boolean isInheritable) 创建本地线程对象
createThreadLocal(Supplier<? extends T> supplier) 创建本地线程对象
currentThreadGroup() 获取当前线程的线程组
execAsync(Callable task) 执行有返回值的异步方法
Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞
execAsync(Runnable runnable) 执行有返回值的异步方法
Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞
execAsync(Runnable runnable, boolean isDaemon) 执行异步方法
execute(Runnable runnable) 直接在公共线程池中执行线程
getMainThread() 获取进程的主线程
from Voovan
getStackTrace()
getStackTraceElement(int i) 获得堆栈项
getThreads() 获取JVM中与当前线程同组的所有线程
getThreads(ThreadGroup group) 获取JVM中与当前线程同组的所有线程
使用数组二次拷贝方式,防止在线程列表获取过程中线程终止
from Voovan
interrupt(Thread thread, boolean isJoin) 结束线程,调用此方法后,线程将抛出 InterruptedException异常
newCompletionService() 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。
若未完成,则会阻塞
newCompletionService(ExecutorService executor) 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。
若未完成,则会阻塞
newCountDownLatch(int threadCount) 新建一个CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
newExecutor() 获得一个新的线程池,默认的策略如下:
newExecutor(int corePoolSize) 新建一个线程池,默认的策略如下:
newExecutor(int corePoolSize, int maximumPoolSize) 获得一个新的线程池
如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60s
newExecutor(int corePoolSize, int maximumPoolSize, int maximumQueueSize) 获得一个新的线程池,并指定最大任务队列大小
如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60s
newExecutorByBlockingCoefficient(float blockingCoefficient) 获得一个新的线程池
传入阻塞系数,线程池的大小计算公式为:CPU可用核心数 / (1 - 阻塞因子)
Blocking Coefficient(阻塞系数) = 阻塞时间/(阻塞时间+使用CPU的时间)
计算密集型任务的阻塞系数为0,而IO密集型任务的阻塞系数则接近于1。
newNamedThreadFactory(String prefix, boolean isDaemon) 创建线程工厂
newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon) 创建线程工厂
newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon, Thread.UncaughtExceptionHandler handler) 创建线程工厂
newSingleExecutor() 获得一个新的线程池,只有单个线程,策略如下:
newThread(Runnable runnable, String name) 创建新线程,非守护线程,正常优先级,线程组与当前线程的线程组一致
newThread(Runnable runnable, String name, boolean isDaemon) 创建新线程
safeSleep(long millis) 考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数
safeSleep(Number millis) 考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数
schedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式。
注意:此方法的延迟和周期的单位均为毫秒。 fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动。 fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行。
schedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, TimeUnit timeUnit, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式。 fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动。 fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行。
sleep(long millis) 挂起当前线程
sleep(Number millis) 挂起当前线程
sleep(Number timeout, TimeUnit timeUnit) 挂起当前线程
sync(Object obj) 阻塞当前线程,保证在main方法中执行不被退出
waitForDie() 等待当前线程结束.
waitForDie(Thread thread) 等待线程结束.

LockUtil

锁相关工具

方法 介绍
createReadWriteLock(boolean fair) 创建ReentrantReadWriteLock锁
createStampLock() 创建StampedLock锁
getNoLock() 获取单例的无锁对象

ArrayUtil

数组工具类

方法 介绍
addAll(T[]... arrays) 将多个数组合并在一起
忽略null的数组
append(Object array, T... newElements) 将新元素添加到已有数组中
添加新元素会生成一个新的数组,不影响原数组
append(T[] buffer, T... newElements) 将新元素添加到已有数组中
添加新元素会生成一个新的数组,不影响原数组
cast(Class<?> type, Object arrayObj) 强转数组类型
强制转换的前提是数组元素类型可被强制转换
强制转换后会生成一个新数组
clone(T obj) 克隆数组,如果非数组返回null
clone(T[] array) 克隆数组
contains(T[] array, T value) 数组中是否包含元素
containsAll(T[] array, T... values) 数组中是否包含指定元素中的全部
containsAny(T[] array, T... values) 数组中是否包含指定元素中的任意一个
containsIgnoreCase(CharSequence[] array, CharSequence value) 数组中是否包含元素,忽略大小写
copy(Object src, int srcPos, Object dest, int destPos, int length) 包装 System.arraycopy(Object, int, Object, int, int)
数组复制
copy(Object src, Object dest, int length) 包装 System.arraycopy(Object, int, Object, int, int)
数组复制,缘数组和目标数组都是从位置0开始复制
defaultIfEmpty(T[] array, T[] defaultArray) 如果给定数组为空,返回默认数组
distinct(T[] array) 去重数组中的元素,去重后生成新的数组,原数组不变
此方法通过LinkedHashSet 去重
edit(T[] array, Editor editor) 编辑数组
编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
emptyCount(Object... args) 计算null或空元素对象的个数,通过ObjectUtil.isEmpty(Object) 判断元素
equals(Object array1, Object array2) 判断两个数组是否相等,判断依据包括数组长度和每个元素都相等。
filter(T[] array, Filter filter) 过滤
过滤过程通过传入的Filter实现来过滤返回需要的元素内容,这个Filter实现可以实现以下功能:
firstMatch(Matcher matcher, T... array) 返回数组中第一个匹配规则的值
firstNonNull(T... array) 返回数组中第一个非空元素
get(Object array, int index) 获取数组对象中指定index的值,支持负数,例如-1表示倒数第一个值
如果数组下标越界,返回null
getAny(Object array, int... indexes) 获取数组中指定多个下标元素值,组成新数组
getArrayType(Class<?> componentType) 根据数组元素类型,获取数组的类型
方法是通过创建一个空数组从而获取其类型
getComponentType(Class<?> arrayClass) 获取数组对象的元素类型
getComponentType(Object array) 获取数组对象的元素类型
hasEmpty(Object... args) 是否存在null或空对象,通过ObjectUtil.isEmpty(Object) 判断元素
hasNull(T... array) 是否包含null元素
indexOf(T[] array, Object value) 返回数组中指定元素所在位置,未找到返回PrimitiveArrayUtil.INDEX_NOT_FOUND
indexOf(T[] array, Object value, int beginIndexInclude) 返回数组中指定元素所在位置,未找到返回PrimitiveArrayUtil.INDEX_NOT_FOUND
indexOfIgnoreCase(CharSequence[] array, CharSequence value) 返回数组中指定元素所在位置,忽略大小写,未找到返回PrimitiveArrayUtil.INDEX_NOT_FOUND
indexOfSub(T[] array, int beginInclude, T[] subArray) 查找子数组的位置
indexOfSub(T[] array, T[] subArray) 查找子数组的位置
insert(Object array, int index, T... newElements) 将新元素插入到到已有数组中的某个位置
添加新元素会生成一个新的数组,不影响原数组
如果插入位置为为负数,从原数组从后向前计数,若大于原数组长度,则空白处用null填充
insert(T[] buffer, int index, T... newElements) 将新元素插入到到已有数组中的某个位置
添加新元素会生成一个新的数组,不影响原数组
如果插入位置为为负数,从原数组从后向前计数,若大于原数组长度,则空白处用null填充
isAllEmpty(Object... args) 是否存都为null或空对象,通过ObjectUtil.isEmpty(Object) 判断元素
isAllNotEmpty(Object... args) 是否存都不为null或空对象,通过ObjectUtil.isEmpty(Object) 判断元素
isAllNotNull(T... array) 多个字段是否全部不为null
isAllNull(T... array) 多个字段是否全为null
isArray(Object obj) 对象是否为数组对象
isEmpty(Object array) 数组是否为空
此方法会匹配单一对象,如果此对象为null则返回true
如果此对象为非数组,理解为此对象为数组的第一个元素,则返回false
如果此对象为数组对象,数组长度大于0情况下返回false,否则返回true
isEmpty(T[] array) 数组是否为空
isNotEmpty(Object array) 数组是否为非空
此方法会匹配单一对象,如果此对象为null则返回false
如果此对象为非数组,理解为此对象为数组的第一个元素,则返回true
如果此对象为数组对象,数组长度大于0情况下返回true,否则返回false
isNotEmpty(T[] array) 数组是否为非空
isSorted(T[] array) 检查数组是否升序,即array[i].compareTo(array[i + 1]) <= 0,若传入空数组,则返回false
isSorted(T[] array, Comparator<? super T> comparator) 检查数组是否有序,即comparator.compare(array[i], array[i + 1]) <= 0,若传入空数组或空比较器,则返回false
isSortedASC(T[] array) 检查数组是否升序,即array[i].compareTo(array[i + 1]) <= 0,若传入空数组,则返回false
isSortedDESC(T[] array) 检查数组是否降序,即array[i].compareTo(array[i + 1]) >= 0,若传入空数组,则返回false
isSub(T[] array, T[] subArray) 查找子数组的位置
join(Object array, CharSequence conjunction) 以 conjunction 为分隔符将数组转换为字符串
join(T[] array, CharSequence conjunction) 以 conjunction 为分隔符将数组转换为字符串
join(T[] array, CharSequence conjunction, Editor editor) 以 conjunction 为分隔符将数组转换为字符串
join(T[] array, CharSequence delimiter, String prefix, String suffix) 以 conjunction 为分隔符将数组转换为字符串
lastIndexOf(T[] array, Object value) 返回数组中指定元素所在最后的位置,未找到返回PrimitiveArrayUtil.INDEX_NOT_FOUND
lastIndexOf(T[] array, Object value, int endInclude) 返回数组中指定元素所在最后的位置,未找到返回PrimitiveArrayUtil.INDEX_NOT_FOUND
lastIndexOfSub(T[] array, int endInclude, T[] subArray) 查找最后一个子数组的开始位置
lastIndexOfSub(T[] array, T[] subArray) 查找最后一个子数组的开始位置
length(Object array) 获取数组长度
如果参数为null,返回0
map(Object array, Class targetComponentType, Function<? super T,? extends R> func) 按照指定规则,将一种类型的数组转换为另一种类型
map(T[] array, Class targetComponentType, Function<? super T,? extends R> func) 按照指定规则,将一种类型的数组转换为另一种类型
map(T[] array, Function<? super T,? extends R> func) 按照指定规则,将一种类型的数组元素提取后转换为List
matchIndex(Matcher matcher, int beginIndexInclude, T... array) 返回数组中第一个匹配规则的值的位置
matchIndex(Matcher matcher, T... array) 返回数组中第一个匹配规则的值的位置
max(T[] numberArray) 取最大值
max(T[] numberArray, Comparator comparator) 取最大值
min(T[] numberArray) 取最小值
min(T[] numberArray, Comparator comparator) 取最小值
newArray(Class<?> componentType, int newSize) 新建一个空数组
newArray(int newSize) 新建一个空数组
nullToEmpty(String[] array) 数组元素中的null转换为""
remove(T[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
removeBlank(T[] array) 去除null或者""或者空白字符串 元素
removeEle(T[] array, T element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEmpty(T[] array) 去除null或者"" 元素
removeNull(T[] array) 去除null 元素
resize(Object array, int newSize) 生成一个新的重新设置大小的数组
调整大小后拷贝原数组到新数组下。扩大则占位前N个位置,其它位置补充0,缩小则截断
resize(T[] buffer, int newSize) 生成一个新的重新设置大小的数组
新数组的类型为原数组的类型,调整大小后拷贝原数组到新数组下。扩大则占位前N个位置,缩小则截断
resize(T[] data, int newSize, Class<?> componentType) 生成一个新的重新设置大小的数组
调整大小后拷贝原数组到新数组下。扩大则占位前N个位置,缩小则截断
reverse(T[] array) 反转数组,会变更原数组
reverse(T[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
setOrAppend(Object array, int index, Object value) 将元素值设置为数组的某个位置,当给定的index大于数组长度,则追加
setOrAppend(T[] buffer, int index, T value) 将元素值设置为数组的某个位置,当给定的index大于数组长度,则追加
shuffle(T[] array) 打乱数组顺序,会变更原数组
shuffle(T[] array, Random random) 打乱数组顺序,会变更原数组
sub(Object array, int start, int end) 获取子数组
sub(Object array, int start, int end, int step) 获取子数组
sub(T[] array, int start, int end) 获取子数组
swap(Object array, int index1, int index2) 交换数组中两个位置的值
swap(T[] array, int index1, int index2) 交换数组中两个位置的值
toArray(ByteBuffer bytebuffer) ByteBuffer 转byte数组
toArray(Collection collection, Class componentType) 将集合转为数组
toArray(Iterable iterable, Class componentType) 将集合转为数组
toArray(Iterator iterator, Class componentType) 将集合转为数组
toString(Object obj) 数组或集合转String
wrap(Object obj) 包装数组对象
zip(K[] keys, V[] values) 映射键值(参考Python的zip()函数),返回Map无序
例如:
keys = [a,b,c,d]
values = [1,2,3,4]
则得到的Map是 {a=1, b=2, c=3, d=4}
如果两个数组长度不同,则只对应最短部分
zip(K[] keys, V[] values, boolean isOrder) 映射键值(参考Python的zip()函数)
例如:
keys = [a,b,c,d]
values = [1,2,3,4]
则得到的Map是 {a=1, b=2, c=3, d=4}
如果两个数组长度不同,则只对应最短部分

BooleanUtil

Boolean类型相关工具类

方法 介绍
and(boolean... array) 对Boolean数组取与
andOfWrap(Boolean... array) 对Boolean数组取与
isBoolean(Class<?> clazz) 给定类是否为Boolean或者boolean
isFalse(Boolean bool) 检查 Boolean 值是否为 false
isTrue(Boolean bool) 检查 Boolean 值是否为 true
negate(boolean bool) 取相反值
negate(Boolean bool) 取相反值
or(boolean... array) 对Boolean数组取或
orOfWrap(Boolean... array) 对Boolean数组取或
toBoolean(String valueStr) 转换字符串为boolean值
toByte(boolean value) boolean值转为byte
toByteObj(boolean value) boolean值转为Byte
toChar(boolean value) boolean值转为char
toCharacter(boolean value) boolean值转为Character
toDouble(boolean value) boolean值转为double
toDoubleObj(boolean value) boolean值转为double
toFloat(boolean value) boolean值转为float
toFloatObj(boolean value) boolean值转为Float
toInt(boolean value) boolean值转为int
toInteger(boolean value) boolean值转为Integer
toLong(boolean value) boolean值转为long
toLongObj(boolean value) boolean值转为Long
toShort(boolean value) boolean值转为short
toShortObj(boolean value) boolean值转为Short
toString(boolean bool, String trueString, String falseString) 将boolean转换为字符串
toStringOnOff(boolean bool) 将boolean转换为字符串 'on' 或者 'off'.
toStringTrueFalse(boolean bool) 将boolean转换为字符串 'true' 或者 'false'.
toStringYesNo(boolean bool) 将boolean转换为字符串 'yes' 或者 'no'.
xor(boolean... array) 对Boolean数组取异或
xorOfWrap(Boolean... array) 对Boolean数组取异或

ByteUtil

对数字和字节进行转换。

假设数据存储是以大端模式存储的:

byte: 字节类型 占8位二进制 00000000 char: 字符类型 占2个字节 16位二进制 byte[0] byte[1] int : 整数类型 占4个字节 32位二进制 byte[0] byte[1] byte[2] byte[3] long: 长整数类型 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4] byte[5] long: 长整数类型 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4] byte[5] byte[6] byte[7] float: 浮点数(小数) 占4个字节 32位二进制 byte[0] byte[1] byte[2] byte[3] double: 双精度浮点数(小数) 占8个字节 64位二进制 byte[0] byte[1] byte[2] byte[3] byte[4]byte[5] byte[6] byte[7] 注:注释来自Hanlp,代码提供来自pr#1492@Github

方法 介绍
bytesToDouble(byte[] bytes) byte数组转Double
默认以小端序转换
bytesToDouble(byte[] bytes, ByteOrder byteOrder) byte数组转double
自定义端序
bytesToInt(byte[] bytes) byte[]转int值
默认以小端序转换
bytesToInt(byte[] bytes, ByteOrder byteOrder) byte[]转int值
自定义端序
bytesToLong(byte[] bytes) byte数组转long
默认以小端序转换
from: https://stackoverflow.com/questions/4485128/how-do-i-convert-long-to-byte-and-back-in-java
bytesToLong(byte[] bytes, ByteOrder byteOrder) byte数组转long
自定义端序
from: https://stackoverflow.com/questions/4485128/how-do-i-convert-long-to-byte-and-back-in-java
bytesToShort(byte[] bytes) byte数组转short
默认以小端序转换
bytesToShort(byte[] bytes, ByteOrder byteOrder) byte数组转short
自定义端序
byteToUnsignedInt(byte byteValue) byte转无符号int
doubleToBytes(double doubleValue) double转byte数组
默认以小端序转换
doubleToBytes(double doubleValue, ByteOrder byteOrder) double转byte数组
自定义端序
from: https://stackoverflow.com/questions/4485128/how-do-i-convert-long-to-byte-and-back-in-java
intToByte(int intValue) int转byte
intToBytes(int intValue) int转byte数组
默认以小端序转换
intToBytes(int intValue, ByteOrder byteOrder) int转byte数组
自定义端序
longToBytes(long longValue) long转byte数组
默认以小端序转换
from: https://stackoverflow.com/questions/4485128/how-do-i-convert-long-to-byte-and-back-in-java
longToBytes(long longValue, ByteOrder byteOrder) long转byte数组
自定义端序
from: https://stackoverflow.com/questions/4485128/how-do-i-convert-long-to-byte-and-back-in-java
numberToBytes(Number number) 将Number转换为
numberToBytes(Number number, ByteOrder byteOrder) 将Number转换为
shortToBytes(short shortValue) short转byte数组
默认以小端序转换
shortToBytes(short shortValue, ByteOrder byteOrder) short转byte数组
自定义端序

CharsetUtil

字符集工具类

方法 介绍
charset(String charsetName) 转换为Charset对象
convert(File file, Charset srcCharset, Charset destCharset) 转换文件编码
此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
convert(String source, Charset srcCharset, Charset destCharset) 转换字符串的字符集编码
当以错误的编码读取为字符串时,打印字符串将出现乱码。
此方法用于纠正因读取使用编码错误导致的乱码问题。
例如,在Servlet请求中客户端用GBK编码了请求参数,我们使用UTF-8读取到的是乱码,此时,使用此方法即可还原原编码的内容
convert(String source, String srcCharset, String destCharset) 转换字符串的字符集编码
defaultCharset() 系统默认字符集编码
defaultCharset(InputStream in, Charset... charsets) 探测编码
注意:此方法会读取流的一部分,然后关闭流,如重复使用流,请使用使用支持reset方法的流
defaultCharset(int bufferSize, InputStream in, Charset... charsets) 探测编码
注意:此方法会读取流的一部分,然后关闭流,如重复使用流,请使用使用支持reset方法的流
defaultCharsetName() 系统默认字符集编码
parse(String charsetName) 解析字符串编码为Charset对象,解析失败返回系统默认编码
parse(String charsetName, Charset defaultCharset) 解析字符串编码为Charset对象,解析失败返回默认编码
systemCharset() 系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()
systemCharsetName() 系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()

CharUtil

字符工具类

部分工具来自于Apache Commons系列

方法 介绍
digit16(int b) 获取给定字符的16进制数值
equals(char c1, char c2, boolean caseInsensitive) 比较两个字符是否相同
getType(int c) 获取字符类型
isAscii(char ch) 是否为ASCII字符,ASCII字符位于0~127之间
isAsciiControl(char ch) 是否为ASCII控制符(不可见字符),控制符位于0~31和127
isAsciiPrintable(char ch) 是否为可见ASCII字符,可见字符位于32~126之间
isBlankChar(char c) 是否空白符
空白符包括空格、制表符、全角空格和不间断空格
isBlankChar(int c) 是否空白符
空白符包括空格、制表符、全角空格和不间断空格
isChar(Object value) 给定对象对应的类是否为字符类,字符类包括:
isCharClass(Class<?> clazz) 给定类名是否为字符类,字符类包括:
isEmoji(char c) 判断是否为emoji表情符
isFileSeparator(char c) 是否为Windows或者Linux(Unix)文件分隔符
Windows平台下分隔符为\,Linux(Unix)为/
isHexChar(char c) 是否为16进制规范的字符,判断是否为如下字符
isLetter(char ch) 判断是否为字母(包括大写字母和小写字母)
字母包括AZ和az
isLetterLower(char ch) 检查字符是否为小写字母,小写字母指a~z
isLetterOrNumber(char ch) 是否为字母或数字,包括AZ、az、0~9
isLetterUpper(char ch) 判断是否为大写字母,大写字母包括A~Z
isNumber(char ch) 检查是否为数字字符,数字字符指0~9
toCloseByNumber(int number) 将[1-20]数字转换为带圈的字符:
toCloseChar(char c) 将字母、数字转换为带圈的字符:
toString(char c) 字符转为字符串
如果为ASCII字符,使用缓存

ClassLoaderUtil

ClassLoader工具类

方法 介绍
getClassLoader() 获取ClassLoader
获取顺序如下:
getContextClassLoader() 获取当前线程的ClassLoader
getJarClassLoader(File jarOrDir) 创建新的JarClassLoader,并使用此Classloader加载目录下的class文件和jar文件
getSystemClassLoader() 获取系统ClassLoader
isPresent(String className) 指定类是否被提供,使用默认ClassLoader
通过调用loadClass(String, ClassLoader, boolean)方法尝试加载指定类名的类,如果加载失败返回false
加载失败的原因可能是此类不存在或其关联引用类不存在
isPresent(String className, ClassLoader classLoader) 指定类是否被提供
通过调用loadClass(String, ClassLoader, boolean)方法尝试加载指定类名的类,如果加载失败返回false
加载失败的原因可能是此类不存在或其关联引用类不存在
loadClass(File jarOrDir, String name) 加载外部类
loadClass(String name) 加载类,通过传入类的字符串,返回其对应的类名,使用默认ClassLoader并初始化类(调用static模块内容和初始化static属性)
扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
loadClass(String name, boolean isInitialized) 加载类,通过传入类的字符串,返回其对应的类名,使用默认ClassLoader
扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
loadClass(String name, ClassLoader classLoader, boolean isInitialized) 加载类,通过传入类的字符串,返回其对应的类名
此方法支持缓存,第一次被加载的类之后会读取缓存中的类
加载失败的原因可能是此类不存在或其关联引用类不存在
扩展Class.forName(String, boolean, ClassLoader)方法,支持以下几类类名的加载:
loadPrimitiveClass(String name) 加载原始类型的类。包括原始类型、原始类型数组和void

ClassUtil

类工具类

方法 介绍
equals(Class<?> clazz, String className, boolean ignoreCase) 指定类是否与给定的类名相同
getClass(T obj) null安全的获取对象类型
getClasses(Object... objects) 获得对象数组的类数组
getClassLoader() 获取ClassLoader
获取顺序如下:
getClassName(Class<?> clazz, boolean isSimple) 获取类名
类名并不包含“.class”这个扩展名
例如:ClassUtil这个类
getClassName(Object obj, boolean isSimple) 获取类名
getClassPath() 获得ClassPath,将编码后的中文路径解码为原字符
这个ClassPath路径会文件路径被标准化处理
getClassPath(boolean isEncoded) 获得ClassPath,这个ClassPath路径会文件路径被标准化处理
getClassPathResources() 获得ClassPath,不解码路径中的特殊字符(例如空格和中文)
getClassPathResources(boolean isDecode) 获得ClassPath
getClassPaths(String packageName) 获得ClassPath,不解码路径中的特殊字符(例如空格和中文)
getClassPaths(String packageName, boolean isDecode) 获得ClassPath
getClassPathURL() 获得ClassPath URL
getContextClassLoader() 获取当前线程的ClassLoader
getDeclaredField(Class<?> clazz, String fieldName) 查找指定类中的所有字段(包括非public字段), 字段不存在则返回null
getDeclaredFields(Class<?> clazz) 查找指定类中的所有字段(包括非public字段)
getDeclaredMethod(Class clazz, String methodName, Class... parameterTypes) 查找指定类中的所有方法(包括非public方法),也包括父类和Object类的方法 找不到方法会返回null
getDeclaredMethodNames(Class<?> clazz) 获得指定类中的Public方法名
去重重载的方法
getDeclaredMethodOfObj(Object obj, String methodName, Object... args) 查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法
getDeclaredMethods(Class<?> clazz) 获得声明的所有方法,包括本类及其父类和接口的所有方法和Object类的方法
getDefaultValue(Class<?> clazz) 获取指定类型分的默认值
默认值规则为:
getDefaultValues(Class<?>... classes) 获得默认值列表
getEnclosingClass(Class<?> clazz) 获得外围类
返回定义此类或匿名类所在的类,如果类本身是在包中定义的,返回null
getJavaClassPaths()
getLocation(Class<?> clazz) 获取class类路径URL, 不管是否在jar包中都会返回文件夹的路径
class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录
jdk中的类不能使用此方法
getLocationPath(Class<?> clazz) 获取class类路径, 不管是否在jar包中都会返回文件夹的路径
class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录
jdk中的类不能使用此方法
getPackage(Class<?> clazz) 获得给定类所在包的名称
例如:
com.xiaoleilu.hutool.util.ClassUtil =》 com.xiaoleilu.hutool.util
getPackagePath(Class<?> clazz) 获得给定类所在包的路径
例如:
com.xiaoleilu.hutool.util.ClassUtil =》 com/xiaoleilu/hutool/util
getPublicMethod(Class clazz, String methodName, Class... paramTypes) 查找指定Public方法 如果找不到对应的方法或方法不为public的则返回null
getPublicMethodNames(Class<?> clazz) 获得指定类中的Public方法名
去重重载的方法
getPublicMethods(Class<?> clazz) 获得本类及其父类所有Public方法
getPublicMethods(Class<?> clazz, Filter filter) 获得指定类过滤后的Public方法列表
getPublicMethods(Class<?> clazz, Method... excludeMethods) 获得指定类过滤后的Public方法列表
getPublicMethods(Class<?> clazz, String... excludeMethodNames) 获得指定类过滤后的Public方法列表
getResources(String resource) 获取指定路径下的资源列表
路径格式必须为目录格式,用/分隔,例如:
getResourceURL(String resource) 获得资源的URL
路径用/分隔,例如:
getResourceUrl(String resource, Class<?> baseClass) 获得资源相对路径对应的URL
getShortClassName(String className) 获取完整类名的短格式如:
cn.hutool.core.util.StrUtil -》c.h.c.u.StrUtil
getTypeArgument(Class<?> clazz) 获得给定类的第一个泛型参数
getTypeArgument(Class<?> clazz, int index) 获得给定类的泛型参数
invoke(String classNameWithMethodName, boolean isSingleton, Object... args) 执行方法
可执行Private方法,也可执行static方法
执行非static方法时,必须满足对象有默认构造方法
invoke(String classNameWithMethodName, Object[] args) 执行方法
可执行Private方法,也可执行static方法
执行非static方法时,必须满足对象有默认构造方法
非单例模式,如果是非静态方法,每次创建一个新对象
invoke(String className, String methodName, boolean isSingleton, Object... args) 执行方法
可执行Private方法,也可执行static方法
执行非static方法时,必须满足对象有默认构造方法
invoke(String className, String methodName, Object[] args) 执行方法
可执行Private方法,也可执行static方法
执行非static方法时,必须满足对象有默认构造方法
非单例模式,如果是非静态方法,每次创建一个新对象
isAbstract(Class<?> clazz) 是否为抽象类
isAllAssignableFrom(Class[] types1, Class[] types2) 比较判断types1和types2两组类,如果types1中所有的类都与types2对应位置的类相同,或者是其父类或接口,则返回true
isAssignable(Class targetType, Class sourceType) 检查目标类是否可以从原类转化
转化包括:
1、原类是对象,目标类型是原类型实现的接口
2、目标类型是原类型的父类
3、两者是原始类型或者包装类型(相互转换)
isBasicType(Class<?> clazz) 是否为基本类型(包括包装类和原始类)
isEnum(Class<?> clazz) 判断类是否为枚举类型
isJdkClass(Class<?> clazz) 是否为JDK中定义的类或接口,判断依据:
isNormalClass(Class<?> clazz) 是否为标准的类
这个类必须:
isNotPublic(Class<?> clazz) 指定类是否为非public
isNotPublic(Method method) 指定方法是否为非public
isPrimitiveWrapper(Class<?> clazz) 是否为包装类型
isPublic(Class<?> clazz) 指定类是否为Public
isPublic(Method method) 指定方法是否为Public
isSimpleTypeOrArray(Class<?> clazz) 是否简单值类型或简单值类型的数组
包括:原始类型,、String、other CharSequence, a Number, a Date, a URI, a URL, a Locale or a Class及其数组
isSimpleValueType(Class<?> clazz) 是否为简单值类型
包括:
isStatic(Method method) 是否为静态方法
isTopLevelClass(Class<?> clazz) 是否为顶层类,即定义在包中的类,而非定义在类中的内部类
loadClass(String className) 加载类并初始化
loadClass(String className, boolean isInitialized) 加载类
scanPackage() 扫描该包路径下所有class文件
scanPackage(String packageName) 扫描该包路径下所有class文件
scanPackage(String packageName, Filter<Class<?>> classFilter) 扫描包路径下满足class过滤器条件的所有class文件,
如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException
因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理,有可能是一个不完善的地方,以后需要进行修改
scanPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass) 扫描指定包路径下所有包含指定注解的类
scanPackageBySuper(String packageName, Class<?> superClass) 扫描指定包路径下所有指定类或接口的子类或实现类
setAccessible(Method method) 设置方法为可访问

CreditCodeUtil

统一社会信用代码工具类

方法 介绍
isCreditCode(CharSequence creditCode) 是否是有效的统一社会信用代码
isCreditCodeSimple(CharSequence creditCode) 正则校验统一社会信用代码(18位)
randomCreditCode() 获取一个随机的统一社会信用代码

DesensitizedUtil

脱敏工具类,支持以下类型信息的脱敏自动处理: 用户ID 中文名 身份证 座机号 手机号 地址 电子邮件 密码 车牌 银行卡号

方法 介绍
address(String address, int sensitiveSize) 【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
bankCard(String bankCardNo) 银行卡号脱敏 eg: 1101 **** **** **** 3256
carLicense(String carLicense) 【中国车牌】车牌中间用代替 eg1:null -》 "" eg1:"" -》 "" eg3:苏D40000 -》 苏D40 eg4:陕A12345D -》 陕A1**D eg5:京A123 -》 京A123 如果是错误的车牌,不处理
chineseName(String fullName) 【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
desensitized(CharSequence str, DesensitizedUtil.DesensitizedType desensitizedType) 脱敏,使用默认的脱敏策略
email(String email) 【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com
fixedPhone(String num) 【固定电话 前四位,后两位
idCardNum(String idCardNum, int front, int end) 【身份证号】前1位 和后2位
mobilePhone(String num) 【手机号码】前三位,后4位,其他隐藏,比如135****2210
password(String password) 【密码】密码的全部字符都用代替,比如:*****
userId() 【用户id】不对外提供userId

EnumUtil

枚举工具类

方法 介绍
contains(Class enumClass, String val) 判断某个值是存在枚举中
equals(Enum<?> e, String val) 检查某个枚举值是否匹配指定值
equalsIgnoreCase(Enum<?> e, String val) 忽略大小检查某个枚举值是否匹配指定值
fromString(Class enumClass, String value) 字符串转枚举,调用Enum.valueOf(Class, String)
fromString(Class enumClass, String value, E defaultValue) 字符串转枚举,调用Enum.valueOf(Class, String)
如果无枚举值,返回默认值
fromStringQuietly(Class enumClass, String value) 字符串转枚举,调用Enum.valueOf(Class, String),转换失败返回null 而非报错
getEnumAt(Class enumClass, int index) 字符串转枚举,调用Enum.valueOf(Class, String)
getEnumMap(Class enumClass) 获取枚举字符串值和枚举对象的Map对应,使用LinkedHashMap保证有序
结果中键为枚举名,值为枚举对象
getFieldNames(Class> clazz) 获得枚举类中所有的字段名
除用户自定义的字段名,也包括“name”字段,例如:
getFieldValues(Class> clazz, String fieldName) 获得枚举类中各枚举对象下指定字段的值
getNameFieldMap(Class> clazz, String fieldName) 获得枚举名对应指定字段值的Map
键为枚举名,值为字段值
getNames(Class> clazz) 枚举类中所有枚举对象的name列表
isEnum(Class<?> clazz) 指定类是否为Enum类
isEnum(Object obj) 指定类是否为Enum类
likeValueOf(Class enumClass, Object value) 模糊匹配转换为枚举,给定一个值,匹配枚举中定义的所有字段名(包括name属性),一旦匹配到返回这个枚举对象,否则返回null
notContains(Class enumClass, String val) 判断某个值是不存在枚举中
toString(Enum<?> e) Enum对象转String,调用Enum.name() 方法

EscapeUtil

转义和反转义工具类Escape / Unescape

escape采用ISO Latin字符集对指定的字符串进行编码。

所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。

方法 介绍
escape(CharSequence content) Escape编码(Unicode)(等同于JS的escape()方法)
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + .
escape(CharSequence content, Filter filter) Escape编码(Unicode)
该方法不会对 ASCII 字母和数字进行编码。其他所有的字符都会被转义序列替换。
escapeAll(CharSequence content) Escape编码(Unicode)
该方法不会对 ASCII 字母和数字进行编码。其他所有的字符都会被转义序列替换。
escapeHtml4(CharSequence html) 转义HTML4中的特殊字符
escapeXml(CharSequence xml) 转义XML中的特殊字符
safeUnescape(String content) 安全的unescape文本,当文本不是被escape的时候,返回原文。
unescape(String content) Escape解码
unescapeHtml4(CharSequence html) 反转义HTML4中的特殊字符
unescapeXml(CharSequence xml) 反转义XML中的特殊字符

HashUtil

Hash算法大全

推荐使用FNV1算法

方法 介绍
additiveHash(String key, int prime) 加法hash
apHash(String str) AP算法
bernstein(String key) Bernstein's hash
bkdrHash(String str) BKDR算法
cityHash128(byte[] data) CityHash算法128-bit实现
cityHash128(byte[] data, Number128 seed) CityHash算法128-bit实现
cityHash32(byte[] data) CityHash算法32-bit实现
cityHash64(byte[] data) CityHash算法64-bit实现
cityHash64(byte[] data, long seed) CityHash算法64-bit实现,种子1使用默认的CityHash#k2
cityHash64(byte[] data, long seed0, long seed1) CityHash算法64-bit实现,种子1使用默认的CityHash#k2
dekHash(String str) DEK算法
djbHash(String str) DJB算法
elfHash(String str) ELF算法
fnvHash(byte[] data) 改进的32位FNV算法1
fnvHash(String data) 改进的32位FNV算法1
identityHashCode(Object obj) 根据对象的内存地址生成相应的Hash值
intHash(int key) Thomas Wang的算法,整数hash
javaDefaultHash(String str) JAVA自己带的算法
jsHash(String str) JS算法
mixHash(String str) 混合hash算法,输出64位的值
murmur128(byte[] data) MurmurHash算法128-bit实现
murmur32(byte[] data) MurmurHash算法32-bit实现
murmur64(byte[] data) MurmurHash算法64-bit实现
oneByOneHash(String key) 一次一个hash
pjwHash(String str) PJW算法
rotatingHash(String key, int prime) 旋转hash
rsHash(String str) RS算法hash
sdbmHash(String str) SDBM算法
tianlHash(String str) TianL Hash算法
universal(char[] key, int mask, int[] tab) Universal Hashing
zobrist(char[] key, int mask, int[][] tab) Zobrist Hashing

HexUtil

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:AF即1015)。

例如十进制数57,在二进制写作111001,在16进制写作39。

像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的32,而不是十进制的20

方法 介绍
appendHex(StringBuilder builder, byte b, boolean toLowerCase) 将byte值转为16进制并添加到StringBuilder中
decodeColor(String hexColor) 将Hex颜色值转为
decodeHex(char[] hexData) 将十六进制字符数组转换为字节数组
decodeHex(CharSequence hexData) 将十六进制字符数组转换为字节数组
decodeHex(String hexStr) 将十六进制字符串解码为byte[]
decodeHexStr(char[] hexData, Charset charset) 将十六进制字符数组转换为字符串
decodeHexStr(String hexStr) 将十六进制字符数组转换为字符串,默认编码UTF-8
decodeHexStr(String hexStr, Charset charset) 将十六进制字符数组转换为字符串
encodeColor(Color color) 将Color编码为Hex形式
encodeColor(Color color, String prefix) 将Color编码为Hex形式
encodeHex(byte[] data) 将字节数组转换为十六进制字符数组
encodeHex(byte[] data, boolean toLowerCase) 将字节数组转换为十六进制字符数组
encodeHex(String str, Charset charset) 将字节数组转换为十六进制字符数组
encodeHexStr(byte[] data) 将字节数组转换为十六进制字符串
encodeHexStr(byte[] data, boolean toLowerCase) 将字节数组转换为十六进制字符串
encodeHexStr(String data) 将字符串转换为十六进制字符串,结果为小写,默认编码是UTF-8
encodeHexStr(String data, Charset charset) 将字符串转换为十六进制字符串,结果为小写
format(String hexStr) 格式化Hex字符串,结果为每2位加一个空格,类似于:
hexToInt(String value) 16进制字符串转为int
hexToLong(String value) 16进制字符串转为long
isHexNumber(String value) 判断给定字符串是否为16进制数
如果是,需要使用对应数字类型对象的decode方法解码
例如:Integer.decode方法解码int类型的16进制数字
toBigInteger(String hexStr) Hex(16进制)字符串转为BigInteger
toHex(int value) 转为16进制字符串
toHex(long value) 转为16进制字符串
toUnicodeHex(char ch) 将指定char值转换为Unicode字符串形式,常用于特殊字符(例如汉字)转Unicode形式
转换的字符串如果u后不足4位,则前面用0填充,例如:
toUnicodeHex(int value) 将指定int值转换为Unicode字符串形式,常用于特殊字符(例如汉字)转Unicode形式
转换的字符串如果u后不足4位,则前面用0填充,例如:

IdcardUtil

身份证相关工具类

see https://www.oschina.net/code/snippet_1611_2881

方法 介绍
convert15To18(String idCard) 将15位身份证号码转换为18位
getAgeByIdCard(String idcard) 根据身份编号获取年龄,只支持15或18位身份证号码
getAgeByIdCard(String idcard, Date dateToCompare) 根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码
getBirth(String idCard) 根据身份编号获取生日,只支持15或18位身份证号码
getBirthByIdCard(String idcard) 根据身份编号获取生日,只支持15或18位身份证号码
getBirthDate(String idCard) 从身份证号码中获取生日日期,只支持15或18位身份证号码
getCityCodeByIdCard(String idcard) 根据身份编号获取市级编码,只支持15或18位身份证号码
getDayByIdCard(String idcard) 根据身份编号获取生日天,只支持15或18位身份证号码
getGenderByIdCard(String idcard) 根据身份编号获取性别,只支持15或18位身份证号码
getIdcardInfo(String idcard) 获取身份证信息,包括身份、城市代码、生日、性别等
getMonthByIdCard(String idcard) 根据身份编号获取生日月,只支持15或18位身份证号码
getProvinceByIdCard(String idcard) 根据身份编号获取户籍省份,只支持15或18位身份证号码
getProvinceCodeByIdCard(String idcard) 根据身份编号获取户籍省份编码,只支持15或18位身份证号码
getYearByIdCard(String idcard) 根据身份编号获取生日年,只支持15或18位身份证号码
hide(String idcard, int startInclude, int endExclude) 隐藏指定位置的几个身份证号数字为“*”
isValidCard(String idCard) 是否有效身份证号,忽略X的大小写
isValidCard10(String idcard) 验证10位身份编码是否合法
isValidCard15(String idcard) 验证15位身份编码是否合法
isValidCard18(String idcard) 判断18位身份证的合法性
isValidCard18(String idcard, boolean ignoreCase) 判断18位身份证的合法性
isValidHKCard(String idcard) 验证香港身份证号码(存在Bug,部份特殊身份证无法检查)
isValidTWCard(String idcard) 验证台湾身份证号码

IdUtil

ID生成器工具类,此工具类中主要封装:

方法 介绍
createSnowflake(long workerId, long datacenterId) Deprecated.
此方法容易产生起义:多个Snowflake实例产生的ID会产生重复,此对象在单台机器上必须单例!
fastSimpleUUID() 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID
fastUUID() 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID
getDataCenterId(long maxDatacenterId) 获取数据中心ID
数据中心ID依赖于本地网卡MAC地址。
getSnowflake() 获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
getSnowflake(long workerId) 获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
getSnowflake(long workerId, long datacenterId) 获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
getWorkerId(long datacenterId, long maxWorkerId) 获取机器ID,使用进程ID配合数据中心ID生成
机器依赖于本进程ID或进程名的Hash值。
nanoId() 获取随机NanoId
nanoId(int size) 获取随机NanoId
objectId() 创建MongoDB ID生成策略实现
ObjectId由以下几部分组成:
randomUUID() 获取随机UUID
simpleUUID() 简化的UUID,去掉了横线

JAXBUtil

JAXB(Java Architecture for XML Binding),根据XML Schema产生Java对象,即实现xml和Bean互转。

方法 介绍
beanToXml(Object bean) JavaBean转换成xml
beanToXml(Object bean, Charset charset, boolean format) JavaBean转换成xml
xmlToBean(File file, Charset charset, Class c) XML文件转Bean
xmlToBean(Reader reader, Class c) 从Reader中读取XML字符串,并转换为Bean
xmlToBean(String xml, Class c) xml转换成JavaBean

JNDIUtil

JNDI工具类

JNDI是Java Naming and Directory Interface(JAVA命名和目录接口)的英文简写,

它是为JAVA应用程序提供命名和目录访问服务的API(Application Programing Interface,应用程序编程接口)。

方法 介绍
createInitialContext(Map<String,String> environment) 创建InitialContext
createInitialDirContext(Map<String,String> environment) 创建InitialDirContext
getAttributes(String uri, String... attrIds) 获取指定容器环境的对象的属性
如获取DNS属性,则URI为类似:dns:hutool.cn

ModifierUtil

修饰符工具类

方法 介绍
hasModifier(Class<?> clazz, ModifierUtil.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
hasModifier(Constructor<?> constructor, ModifierUtil.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
hasModifier(Field field, ModifierUtil.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
hasModifier(Method method, ModifierUtil.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
isPublic(Class<?> clazz) 是否是Public类
isPublic(Constructor<?> constructor) 是否是Public构造
isPublic(Field field) 是否是Public字段
isPublic(Method method) 是否是Public方法
isStatic(Class<?> clazz) 是否是static类
isStatic(Field field) 是否是static字段
isStatic(Method method) 是否是static方法
isSynthetic(Class<?> clazz) 是否是合成类(由java编译器生成的)
isSynthetic(Field field) 是否是合成字段(由java编译器生成的)
isSynthetic(Method method) 是否是合成方法(由java编译器生成的)

NumberUtil

数字工具类

对于精确值计算应该使用 BigDecimal

JDK7中BigDecimal(double val)构造方法的结果有一定的不可预知性,例如:

方法 介绍
add(BigDecimal... values) 提供精确的加法运算
如果传入多个值为null或者空,则返回0
add(double v1, double v2) 提供精确的加法运算
add(Double v1, Double v2) 提供精确的加法运算
add(double v1, float v2) 提供精确的加法运算
add(float v1, double v2) 提供精确的加法运算
add(float v1, float v2) 提供精确的加法运算
add(Number... values) 提供精确的加法运算
如果传入多个值为null或者空,则返回0
add(Number v1, Number v2) 提供精确的加法运算
如果传入多个值为null或者空,则返回0
add(String... values) 提供精确的加法运算
如果传入多个值为null或者空,则返回0
appendRange(int start, int stop, Collection values) 将给定范围内的整数添加到已有集合中,步进为1
appendRange(int start, int stop, int step, Collection values) 将给定范围内的整数添加到已有集合中
binaryToInt(String binaryStr) 二进制转int
binaryToLong(String binaryStr) 二进制转long
calculate(String expression) 计算数学表达式的值,只支持加减乘除和取余
如:
calculate("(01--3)-5/-4-(3(-2.13))") -》 10.64
ceilDiv(int v1, int v2) 补充Math.ceilDiv() JDK8中添加了和Math.floorDiv()但却没有ceilDiv()
compare(byte x, byte y) 比较两个值的大小
compare(char x, char y) 比较两个值的大小
compare(double x, double y) 比较两个值的大小
compare(int x, int y) 比较两个值的大小
compare(long x, long y) 比较两个值的大小
compare(short x, short y) 比较两个值的大小
count(int total, int part) 计算等份个数
decimalFormat(String pattern, double value) 格式化double
对 DecimalFormat 做封装
decimalFormat(String pattern, long value) 格式化double
对 DecimalFormat 做封装
decimalFormat(String pattern, Object value) 格式化double
对 DecimalFormat 做封装
decimalFormat(String pattern, Object value, RoundingMode roundingMode) 格式化double
对 DecimalFormat 做封装
decimalFormatMoney(double value) 格式化金额输出,每三位用逗号分隔
div(BigDecimal v1, BigDecimal v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(double v1, double v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(Double v1, Double v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(double v1, double v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(Double v1, Double v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(double v1, double v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(Double v1, Double v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(double v1, float v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(double v1, float v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(double v1, float v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(float v1, double v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(float v1, double v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(float v1, double v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(float v1, float v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(float v1, float v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(float v1, float v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(Number v1, Number v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(Number v1, Number v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(Number v1, Number v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
div(String v1, String v2) 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
div(String v1, String v2, int scale) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
div(String v1, String v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
divisor(int m, int n) 最大公约数
equals(BigDecimal bigNum1, BigDecimal bigNum2) 比较大小,值相等 返回true
此方法通过调用BigDecimal.compareTo(BigDecimal)方法来判断是否相等
此方法判断值相等时忽略精度的,即0.00 == 0
equals(char c1, char c2, boolean ignoreCase) 比较两个字符是否相同
equals(double num1, double num2) 比较大小,值相等 返回true
此方法通过调用Double.doubleToLongBits(double)方法来判断是否相等
此方法判断值相等时忽略精度的,即0.00 == 0
equals(float num1, float num2) 比较大小,值相等 返回true
此方法通过调用Float.floatToIntBits(float)方法来判断是否相等
此方法判断值相等时忽略精度的,即0.00 == 0
factorial(BigInteger n) 计算阶乘
factorial(BigInteger start, BigInteger end) 计算范围阶乘
factorial(long n) 计算阶乘
factorial(long start, long end) 计算范围阶乘
formatPercent(double number, int scale) 格式化百分比,小数采用四舍五入方式
fromUnsignedByteArray(byte[] buf) 无符号bytes转BigInteger
fromUnsignedByteArray(byte[] buf, int off, int length) 无符号bytes转BigInteger
generateBySet(int begin, int end, int size) 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
generateRandomNumber(int begin, int end, int size) 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
generateRandomNumber(int begin, int end, int size, int[] seed) 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
getBinaryStr(Number number) 获得数字对应的二进制字符串
isBeside(int number1, int number2) 判断两个数字是否相邻,例如1和2相邻,1和3不相邻
判断方法为做差取绝对值判断是否为1
isBeside(long number1, long number2) 判断两个数字是否相邻,例如1和2相邻,1和3不相邻
判断方法为做差取绝对值判断是否为1
isDouble(String s) 判断字符串是否是浮点数
isGreater(BigDecimal bigNum1, BigDecimal bigNum2) 比较大小,参数1 > 参数2 返回true
isGreaterOrEqual(BigDecimal bigNum1, BigDecimal bigNum2) 比较大小,参数1 >= 参数2 返回true
isInteger(String s) 判断String是否是整数
支持10进制
isLess(BigDecimal bigNum1, BigDecimal bigNum2) 比较大小,参数1 < 参数2 返回true
isLessOrEqual(BigDecimal bigNum1, BigDecimal bigNum2) 比较大小,参数1<=参数2 返回true
isLong(String s) 判断字符串是否是Long类型
支持10进制
isNumber(CharSequence str) 是否为数字,支持包括:
isPowerOfTwo(long n) 判断一个整数是否是2的幂
isPrimes(int n) 是否是质数(素数)
质数表的质数又称素数。指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
isValid(double number) 检查是否为有效的数字
检查double否为无限大,或者Not a Number(NaN)
isValid(float number) 检查是否为有效的数字
检查double否为无限大,或者Not a Number(NaN)
isValidNumber(Number number) 检查是否为有效的数字
检查Double和Float是否为无限大,或者Not a Number
非数字类型和Null将返回true
max(BigDecimal... numberArray) 取最大值
max(double... numberArray) 取最大值
max(float... numberArray) 取最大值
max(int... numberArray) 取最大值
max(long... numberArray) 取最大值
max(short... numberArray) 取最大值
max(T[] numberArray) 取最大值
min(BigDecimal... numberArray) 取最小值
min(double... numberArray) 取最小值
min(float... numberArray) 取最小值
min(int... numberArray) 取最小值
min(long... numberArray) 取最小值
min(short... numberArray) 取最小值
min(T[] numberArray) 取最小值
mul(BigDecimal... values) 提供精确的乘法运算
如果传入多个值为null或者空,则返回0
mul(double v1, double v2) 提供精确的乘法运算
mul(Double v1, Double v2) 提供精确的乘法运算
如果传入多个值为null或者空,则返回0
mul(double v1, float v2) 提供精确的乘法运算
mul(float v1, double v2) 提供精确的乘法运算
mul(float v1, float v2) 提供精确的乘法运算
mul(Number... values) 提供精确的乘法运算
如果传入多个值为null或者空,则返回0
mul(Number v1, Number v2) 提供精确的乘法运算
如果传入多个值为null或者空,则返回0
mul(String... values) 提供精确的乘法运算
如果传入多个值为null或者空,则返回0
mul(String v1, String v2) 提供精确的乘法运算
multiple(int m, int n) 最小公倍数
newBigInteger(String str) 创建BigInteger,支持16进制、10进制和8进制,如果传入空白串返回null
from Apache Common Lang
null2Zero(BigDecimal decimal) 空转0
parseDouble(String number) 解析转换数字字符串为long型数字,规则如下:
parseFloat(String number) 解析转换数字字符串为long型数字,规则如下:
parseInt(String number) 解析转换数字字符串为int型数字,规则如下:
parseLong(String number) 解析转换数字字符串为long型数字,规则如下:
parseNumber(String numberStr) 将指定字符串转换为Number 对象
此方法不支持科学计数法
partValue(int total, int partCount) 把给定的总数平均分成N份,返回每份的个数
当除以分数有余数时每份+1
partValue(int total, int partCount, boolean isPlusOneWhenHasRem) 把给定的总数平均分成N份,返回每份的个数
如果isPlusOneWhenHasRem为true,则当除以分数有余数时每份+1,否则丢弃余数部分
pow(BigDecimal number, int n) 提供精确的幂运算
pow(Number number, int n) 提供精确的幂运算
processMultiple(int selectNum, int minNum) 可以用于计算双色球、大乐透注数的方法
比如大乐透35选5可以这样调用processMultiple(7,5); 就是数学中的:C75=76/21
range(int stop) 从0开始给定范围内的整数列表,步进为1
range(int start, int stop) 给定范围内的整数列表,步进为1
range(int start, int stop, int step) 给定范围内的整数列表
round(BigDecimal number, int scale) 保留固定位数小数
采用四舍五入策略 RoundingMode.HALF_UP
例如保留2位小数:123.456789 =》 123.46
round(BigDecimal number, int scale, RoundingMode roundingMode) 保留固定位数小数
例如保留四位小数:123.456789 =》 123.4567
round(double v, int scale) 保留固定位数小数
采用四舍五入策略 RoundingMode.HALF_UP
例如保留2位小数:123.456789 =》 123.46
round(double v, int scale, RoundingMode roundingMode) 保留固定位数小数
例如保留四位小数:123.456789 =》 123.4567
round(String numberStr, int scale) 保留固定位数小数
采用四舍五入策略 RoundingMode.HALF_UP
例如保留2位小数:123.456789 =》 123.46
round(String numberStr, int scale, RoundingMode roundingMode) 保留固定位数小数
例如保留四位小数:123.456789 =》 123.4567
roundDown(BigDecimal value, int scale) 保留固定小数位数,舍去多余位数
roundDown(Number number, int scale) 保留固定小数位数,舍去多余位数
roundHalfEven(BigDecimal value, int scale) 四舍六入五成双计算法
roundHalfEven(Number number, int scale) 四舍六入五成双计算法
roundStr(double v, int scale) 保留固定位数小数
采用四舍五入策略 RoundingMode.HALF_UP
例如保留2位小数:123.456789 =》 123.46
roundStr(double v, int scale, RoundingMode roundingMode) 保留固定位数小数
例如保留四位小数:123.456789 =》 123.4567
roundStr(String numberStr, int scale) 保留固定位数小数
采用四舍五入策略 RoundingMode.HALF_UP
例如保留2位小数:123.456789 =》 123.46
roundStr(String numberStr, int scale, RoundingMode roundingMode) 保留固定位数小数
例如保留四位小数:123.456789 =》 123.4567
sqrt(long x) 平方根算法
推荐使用 Math.sqrt(double)
sub(BigDecimal... values) 提供精确的减法运算
如果传入多个值为null或者空,则返回0
sub(double v1, double v2) 提供精确的减法运算
sub(Double v1, Double v2) 提供精确的减法运算
sub(double v1, float v2) 提供精确的减法运算
sub(float v1, double v2) 提供精确的减法运算
sub(float v1, float v2) 提供精确的减法运算
sub(Number... values) 提供精确的减法运算
如果传入多个值为null或者空,则返回0
sub(Number v1, Number v2) 提供精确的减法运算
如果传入多个值为null或者空,则返回0
sub(String... values) 提供精确的减法运算
如果传入多个值为null或者空,则返回0
toBigDecimal(Number number) 数字转BigDecimal
Float、Double等有精度问题,转换为字符串后再转换
null转换为0
toBigDecimal(String numberStr) 数字转BigDecimal
null或""或空白符转换为0
toBigInteger(Number number) 数字转BigInteger
null转换为0
toBigInteger(String number) 数字转BigInteger
null或""或空白符转换为0
toBytes(int value) int值转byte数组,使用大端字节序(高位字节在前,低位字节在后)
见:http://www.ruanyifeng.com/blog/2016/11/byte-order.html
toDouble(Number value) Number值转换为double
float强制转换存在精度问题,此方法避免精度丢失
toInt(byte[] bytes) byte数组转int,使用大端字节序(高位字节在前,低位字节在后)
见:http://www.ruanyifeng.com/blog/2016/11/byte-order.html
toStr(BigDecimal bigDecimal) BigDecimal数字转字符串
调用BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
toStr(BigDecimal bigDecimal, boolean isStripTrailingZeros) BigDecimal数字转字符串
调用BigDecimal.toPlainString(),可选去除尾小数点儿后多余的0
toStr(Number number) 数字转字符串
调用Object.toString()或 BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
toStr(Number number, boolean isStripTrailingZeros) 数字转字符串
调用Object.toString()或 BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
toStr(Number number, String defaultValue) 数字转字符串
调用Object.toString(),并去除尾小数点儿后多余的0
toUnsignedByteArray(BigInteger value) 以无符号字节数组的形式返回传入值。
toUnsignedByteArray(int length, BigInteger value) 以无符号字节数组的形式返回传入值。
zero2One(int value) 如果给定值为0,返回1,否则返回原值

ObjectUtil

对象工具类,包括判空、克隆、序列化等操作

方法 介绍
clone(T obj) 克隆对象
如果对象实现Cloneable接口,调用其clone方法
如果实现Serializable接口,执行深度克隆
否则返回null
cloneByStream(T obj) 序列化后拷贝流的方式克隆
对象必须实现Serializable接口
cloneIfPossible(T obj) 返回克隆后的对象,如果克隆失败,返回原对象
compare(T c1, T c2) null安全的对象比较,null对象排在末尾
compare(T c1, T c2, boolean nullGreater) null安全的对象比较
contains(Object obj, Object element) 对象中是否包含元素
支持的对象类型包括: String Collection Map Iterator Enumeration Array
defaultIfBlank(T str, T defaultValue) 如果给定对象为null或者""或者空白符返回默认值
defaultIfEmpty(String str, Supplier<? extends T> handle, T defaultValue) 如果给定对象为null或者""返回默认值, 否则返回自定义handle处理后的返回值
defaultIfEmpty(T str, T defaultValue) 如果给定对象为null或者 "" 返回默认值
defaultIfNull(Object source, Supplier<? extends T> handle, T defaultValue) 如果给定对象为null 返回默认值, 如果不为null 返回自定义handle处理后的返回值
defaultIfNull(T object, T defaultValue) 如果给定对象为null返回默认值
deserialize(byte[] bytes) 反序列化
对象必须实现Serializable接口
emptyCount(Object... objs) 存在多少个null或空对象,通过isEmpty(Object) 判断元素
equal(Object obj1, Object obj2) 比较两个对象是否相等。
相同的条件有两个,满足其一即可:
obj1 == null && obj2 == null obj1.equals(obj2) 如果是BigDecimal比较,0 == obj1.compareTo(obj2)
equals(Object obj1, Object obj2) 比较两个对象是否相等,此方法是 equal(Object, Object)的别名方法。
相同的条件有两个,满足其一即可:
obj1 == null && obj2 == null obj1.equals(obj2) 如果是BigDecimal比较,0 == obj1.compareTo(obj2)
getTypeArgument(Object obj) 获得给定类的第一个泛型参数
getTypeArgument(Object obj, int index) 获得给定类的第一个泛型参数
hasEmpty(Object... objs) 是否存在null或空对象,通过isEmpty(Object) 判断元素
hasNull(Object... objs) 是否存在null对象,通过isNull(Object) 判断元素
isAllEmpty(Object... objs) 是否全都为null或空对象,通过isEmpty(Object) 判断元素
isAllNotEmpty(Object... objs) 是否全都不为null或空对象,通过isEmpty(Object) 判断元素
isBasicType(Object object) 是否为基本类型,包括包装类型和非包装类型
isEmpty(Object obj) 判断指定对象是否为空,支持:
isNotEmpty(Object obj) 判断指定对象是否为非空,支持:
isNotNull(Object obj) 检查对象是否不为null
isNull(Object obj) 检查对象是否为null
判断标准为:
isValidIfNumber(Object obj) 检查是否为有效的数字
检查Double和Float是否为无限大,或者Not a Number
非数字类型和Null将返回true
length(Object obj) 计算对象长度,如果是字符串调用其length函数,集合类调用其size函数,数组调用其length属性,其他可遍历对象遍历计算长度
支持的类型包括: CharSequence Map Iterator Enumeration Array
notEqual(Object obj1, Object obj2) 比较两个对象是否不相等。
serialize(T obj) 序列化
对象必须实现Serializable接口
toString(Object obj) 将Object转为String
策略为:

PageUtil

分页工具类

方法 介绍
getEnd(int pageNo, int pageSize) 将页数和每页条目数转换为结束位置
此方法用于不包括结束位置的分页方法
例如:
getFirstPageNo() 获得首页的页码,可以为0或者1
getStart(int pageNo, int pageSize) 将页数和每页条目数转换为开始位置
此方法用于不包括结束位置的分页方法
例如:
rainbow(int currentPage, int pageCount) 分页彩虹算法(默认展示10页)
来自:https://github.com/iceroot/iceroot/blob/master/src/main/java/com/icexxx/util/IceUtil.java
rainbow(int pageNo, int totalPage, int displayCount) 分页彩虹算法
来自:https://github.com/iceroot/iceroot/blob/master/src/main/java/com/icexxx/util/IceUtil.java
通过传入的信息,生成一个分页列表显示
setFirstPageNo(int customFirstPageNo) 设置首页页码,可以为0或者1
setOneAsFirstPageNo() 设置首页页码为1
toSegment(int pageNo, int pageSize) 将页数和每页条目数转换为开始位置和结束位置
此方法用于包括结束位置的分页方法
例如:
totalPage(int totalCount, int pageSize) 根据总数计算总页数
transToStartEnd(int pageNo, int pageSize) 将页数和每页条目数转换为开始位置和结束位置
此方法用于包括结束位置的分页方法
例如:

PhoneUtil

电话号码工具类,包括: 手机号码 400、800号码 座机号码

方法 介绍
hideAfter(CharSequence phone) 隐藏手机号最后4位 替换字符为"*"
hideBefore(CharSequence phone) 隐藏手机号前7位 替换字符为"*" 栗子
hideBetween(CharSequence phone) 隐藏手机号中间4位 替换字符为"*"
isMobile(CharSequence value) 验证是否为手机号码(中国)
isMobileHk(CharSequence value) 验证是否为手机号码(香港)
isMobileMo(CharSequence value) 验证是否为手机号码(澳门)
isMobileTw(CharSequence value) 验证是否为手机号码(台湾)
isPhone(CharSequence value) 验证是否为座机号码+手机号码(CharUtil中国)+ 400 + 800电话 + 手机号号码(香港)
isTel(CharSequence value) 验证是否为座机号码(中国)
isTel400800(CharSequence value) 验证是否为座机号码(中国)+ 400 + 800
subAfter(CharSequence phone) 获取手机号后4位
subBefore(CharSequence phone) 获取手机号前3位
subBetween(CharSequence phone) 获取手机号中间4位
subTelAfter(CharSequence value) 获取固话号码中的号码
subTelBefore(CharSequence value) 获取固话号码中的区号

PrimitiveArrayUtil

原始类型数组工具类

方法 介绍
addAll(boolean[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(byte[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(char[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(double[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(float[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(int[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(long[]... arrays) 将多个数组合并在一起
忽略null的数组
addAll(short[]... arrays) 将多个数组合并在一起
忽略null的数组
contains(boolean[] array, boolean value) 数组中是否包含元素
contains(byte[] array, byte value) 数组中是否包含元素
contains(char[] array, char value) 数组中是否包含元素
contains(double[] array, double value) 数组中是否包含元素
contains(float[] array, float value) 数组中是否包含元素
contains(int[] array, int value) 数组中是否包含元素
contains(long[] array, long value) 数组中是否包含元素
contains(short[] array, short value) 数组中是否包含元素
indexOf(boolean[] array, boolean value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(byte[] array, byte value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(char[] array, char value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(double[] array, double value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(float[] array, float value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(int[] array, int value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(long[] array, long value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
indexOf(short[] array, short value) 返回数组中指定元素所在位置,未找到返回INDEX_NOT_FOUND
isEmpty(boolean[] array) 数组是否为空
isEmpty(byte[] array) 数组是否为空
isEmpty(char[] array) 数组是否为空
isEmpty(double[] array) 数组是否为空
isEmpty(float[] array) 数组是否为空
isEmpty(int[] array) 数组是否为空
isEmpty(long[] array) 数组是否为空
isEmpty(short[] array) 数组是否为空
isNotEmpty(boolean[] array) 数组是否为非空
isNotEmpty(byte[] array) 数组是否为非空
isNotEmpty(char[] array) 数组是否为非空
isNotEmpty(double[] array) 数组是否为非空
isNotEmpty(float[] array) 数组是否为非空
isNotEmpty(int[] array) 数组是否为非空
isNotEmpty(long[] array) 数组是否为非空
isNotEmpty(short[] array) 数组是否为非空
isSorted(byte[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(char[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(double[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(float[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(int[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(long[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSorted(short[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(byte[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(char[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(double[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(float[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(int[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(long[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedASC(short[] array) 检查数组是否升序,即array[i] <= array[i+1],若传入空数组,则返回false
isSortedDESC(byte[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(char[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(double[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(float[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(int[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(long[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
isSortedDESC(short[] array) 检查数组是否降序,即array[i] >= array[i+1],若传入空数组,则返回false
join(boolean[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(byte[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(char[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(double[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(float[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(int[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(long[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
join(short[] array, CharSequence conjunction) Deprecated.
请使用 ArrayUtil.join(Object, CharSequence)
lastIndexOf(boolean[] array, boolean value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(byte[] array, byte value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(char[] array, char value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(double[] array, double value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(float[] array, float value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(int[] array, int value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(long[] array, long value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
lastIndexOf(short[] array, short value) 返回数组中指定元素所在最后的位置,未找到返回INDEX_NOT_FOUND
max(byte... numberArray) 取最大值
max(char... numberArray) 取最大值
max(double... numberArray) 取最大值
max(float... numberArray) 取最大值
max(int... numberArray) 取最大值
max(long... numberArray) 取最大值
max(short... numberArray) 取最大值
min(byte... numberArray) 取最小值
min(char... numberArray) 取最小值
min(double... numberArray) 取最小值
min(float... numberArray) 取最小值
min(int... numberArray) 取最小值
min(long... numberArray) 取最小值
min(short... numberArray) 取最小值
range(int excludedEnd) 生成一个从0开始的数字列表
range(int includedStart, int excludedEnd) 生成一个数字列表
自动判定正序反序
range(int includedStart, int excludedEnd, int step) 生成一个数字列表
自动判定正序反序
remove(boolean[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(byte[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(char[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(double[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(float[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(int[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(long[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(Object array, int index) 移除数组中对应位置的元素
copy from commons-lang
remove(short[] array, int index) 移除数组中对应位置的元素
copy from commons-lang
removeEle(boolean[] array, boolean element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(byte[] array, byte element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(char[] array, char element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(double[] array, double element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(float[] array, float element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(int[] array, int element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(long[] array, long element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
removeEle(short[] array, short element) 移除数组中指定的元素
只会移除匹配到的第一个元素 copy from commons-lang
resize(byte[] bytes, int newSize) 生成一个新的重新设置大小的数组
调整大小后拷贝原数组到新数组下。扩大则占位前N个位置,其它位置补充0,缩小则截断
reverse(boolean[] array) 反转数组,会变更原数组
reverse(boolean[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(byte[] array) 反转数组,会变更原数组
reverse(byte[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(char[] array) 反转数组,会变更原数组
reverse(char[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(double[] array) 反转数组,会变更原数组
reverse(double[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(float[] array) 反转数组,会变更原数组
reverse(float[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(int[] array) 反转数组,会变更原数组
reverse(int[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(long[] array) 反转数组,会变更原数组
reverse(long[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
reverse(short[] array) 反转数组,会变更原数组
reverse(short[] array, int startIndexInclusive, int endIndexExclusive) 反转数组,会变更原数组
shuffle(boolean[] array) 打乱数组顺序,会变更原数组
shuffle(boolean[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(byte[] array) 打乱数组顺序,会变更原数组
shuffle(byte[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(char[] array) 打乱数组顺序,会变更原数组
shuffle(char[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(double[] array) 打乱数组顺序,会变更原数组
shuffle(double[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(float[] array) 打乱数组顺序,会变更原数组
shuffle(float[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(int[] array) 打乱数组顺序,会变更原数组
shuffle(int[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(long[] array) 打乱数组顺序,会变更原数组
shuffle(long[] array, Random random) 打乱数组顺序,会变更原数组
shuffle(short[] array) 打乱数组顺序,会变更原数组
shuffle(short[] array, Random random) 打乱数组顺序,会变更原数组
split(byte[] array, int len) 拆分byte数组为几个等份(最后一份按照剩余长度分配空间)
sub(boolean[] array, int start, int end) 获取子数组
sub(byte[] array, int start, int end) 获取子数组
sub(char[] array, int start, int end) 获取子数组
sub(double[] array, int start, int end) 获取子数组
sub(float[] array, int start, int end) 获取子数组
sub(int[] array, int start, int end) 获取子数组
sub(long[] array, int start, int end) 获取子数组
sub(short[] array, int start, int end) 获取子数组
swap(boolean[] array, int index1, int index2) 交换数组中两个位置的值
swap(byte[] array, int index1, int index2) 交换数组中两个位置的值
swap(char[] array, int index1, int index2) 交换数组中两个位置的值
swap(double[] array, int index1, int index2) 交换数组中两个位置的值
swap(float[] array, int index1, int index2) 交换数组中两个位置的值
swap(int[] array, int index1, int index2) 交换数组中两个位置的值
swap(long[] array, int index1, int index2) 交换数组中两个位置的值
swap(short[] array, int index1, int index2) 交换数组中两个位置的值
unWrap(Boolean... values) 包装类数组转为原始类型数组
unWrap(Byte... values) 包装类数组转为原始类型数组
unWrap(Character... values) 包装类数组转为原始类型数组
unWrap(Double... values) 包装类数组转为原始类型数组
unWrap(Float... values) 包装类数组转为原始类型数组
unWrap(Integer... values) 包装类数组转为原始类型数组,null转为0
unWrap(Long... values) 包装类数组转为原始类型数组
unWrap(Short... values) 包装类数组转为原始类型数组
wrap(boolean... values) 将原始类型数组包装为包装类型
wrap(byte... values) 将原始类型数组包装为包装类型
wrap(char... values) 将原始类型数组包装为包装类型
wrap(double... values) 将原始类型数组包装为包装类型
wrap(float... values) 将原始类型数组包装为包装类型
wrap(int... values) 将原始类型数组包装为包装类型
wrap(long... values) 将原始类型数组包装为包装类型
wrap(short... values) 将原始类型数组包装为包装类型

RadixUtil

进制转换工具类,可以转换为任意进制

方法 介绍
decode(String radixs, String encodeStr) 把转换后进制的字符还原成long 值
decodeToInt(String radixs, String encodeStr) 把转换后的进制字符还原成int 值
encode(String radixs, int num) 把一个整型数值转换成自己定义的进制 长度即进制
encode("AB",10) 51转换成2进制,A=0;B=1 。 二进制1010,结果 BABA encode("VIP",21) 21转换成3进制,V=0;I=1;P=2 ,三进制210 ,得到结果PIV
encode(String radixs, long num) 把一个长整型数值转换成自己定义的进制

RandomUtil

随机工具类

方法 介绍
createSecureRandom(byte[] seed) 创建SecureRandom,类提供加密的强随机数生成器 (RNG)
getRandom() 获取随机数生成器对象
ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。
getRandom(boolean isSecure) 获取随机数产生器
getSecureRandom() 获取SHA1PRNG的SecureRandom,类提供加密的强随机数生成器 (RNG)
注意:此方法获取的是伪随机序列发生器PRNG(pseudo-random number generator)
getSecureRandom(byte[] seed) 获取SHA1PRNG的SecureRandom,类提供加密的强随机数生成器 (RNG)
注意:此方法获取的是伪随机序列发生器PRNG(pseudo-random number generator)
getSecureRandomStrong() 获取algorithms/providers中提供的强安全随机生成器
注意:此方法可能造成阻塞或性能问题
getSHA1PRNGRandom(byte[] seed) 获取SHA1PRNG的SecureRandom,类提供加密的强随机数生成器 (RNG)
注意:此方法获取的是伪随机序列发生器PRNG(pseudo-random number generator),在Linux下噪声生成时可能造成较长时间停顿。
see: http://ifeve.com/jvm-random-and-entropy-source/
randomBigDecimal() 获得指定范围内的随机数[0, 1)
randomBigDecimal(BigDecimal limit) 获得指定范围内的随机数 [0,limit)
randomBigDecimal(BigDecimal min, BigDecimal max) 获得指定范围内的随机数
randomBoolean() 获得随机Boolean值
randomBytes(int length) 随机bytes
randomChar() 随机字母或数字,小写
randomChar(String baseString) 随机字符
randomChinese() 随机汉字('一'-'鿿')
randomColor() Deprecated.
使用ImgUtil.randomColor()
randomDate(Date baseDate, DateField dateField, int min, int max) 以给定日期为基准,随机产生一个日期
randomDay(int min, int max) 以当天为基准,随机产生一个日期
randomDouble() 获得随机数[0, 1)
randomDouble(double limit) 获得指定范围内的随机数 [0,limit)
randomDouble(double min, double max) 获得指定范围内的随机数
randomDouble(double min, double max, int scale, RoundingMode roundingMode) 获得指定范围内的随机数
randomDouble(double limit, int scale, RoundingMode roundingMode) 获得指定范围内的随机数
randomDouble(int scale, RoundingMode roundingMode) 获得指定范围内的随机数
randomEle(List list) 随机获得列表中的元素
randomEle(List list, int limit) 随机获得列表中的元素
randomEle(T[] array) 随机获得数组中的元素
randomEle(T[] array, int limit) 随机获得数组中的元素
randomEleList(List source, int count) 随机获得列表中的一定量的元素,返回List
此方法与randomEles(List, int) 不同点在于,不会获取重复位置的元素
randomEles(List list, int count) 随机获得列表中的一定量元素
randomEleSet(Collection collection, int count) 随机获得列表中的一定量的不重复元素,返回Set
randomInt() 获得随机数int值
randomInt(int limit) 获得指定范围内的随机数 [0,limit)
randomInt(int min, int max) 获得指定范围内的随机数
randomInts(int length) 创建指定长度的随机索引
randomLong() 获得随机数
randomLong(long limit) 获得指定范围内的随机数 [0,limit)
randomLong(long min, long max) 获得指定范围内的随机数[min, max)
randomNumber() 随机数字,数字为0~9单个数字
randomNumbers(int length) 获得一个只包含数字的字符串
randomString(int length) 获得一个随机的字符串(只包含数字和字符)
randomString(String baseString, int length) 获得一个随机的字符串
randomStringUpper(int length) 获得一个随机的字符串(只包含数字和大写字符)
randomStringWithoutStr(int length, String elemData) 获得一个随机的字符串(只包含数字和字符) 并排除指定字符串
weightRandom(Iterable<WeightRandom.WeightObj> weightObjs) 带有权重的随机生成器
weightRandom(WeightRandom.WeightObj[] weightObjs) 带有权重的随机生成器

ReferenceUtil

引用工具类,主要针对Reference 工具化封装

主要封装包括:

方法 介绍
create(ReferenceUtil.ReferenceType type, T referent) 获得引用
create(ReferenceUtil.ReferenceType type, T referent, ReferenceQueue queue) 获得引用

ReflectUtil

反射工具类

方法 介绍
getConstructor(Class clazz, Class<?>... parameterTypes) 查找类中的指定参数的构造方法,如果找到构造方法,会自动设置可访问为true
getConstructors(Class beanClass) 获得一个类中所有构造列表
getConstructorsDirectly(Class<?> beanClass) 获得一个类中所有构造列表,直接反射获取,无缓存
getField(Class<?> beanClass, String name) 查找指定类中的指定name的字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回null
getFieldMap(Class<?> beanClass) 获取指定类中字段名和字段对应的有序Map,包括其父类中的字段
如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
getFieldName(Field field) 获取字段名,如果存在Alias注解,读取注解的值作为名称
getFields(Class<?> beanClass) 获得一个类中所有字段列表,包括其父类中的字段
如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
getFields(Class<?> beanClass, Filter fieldFilter) 获得一个类中所有满足条件的字段列表,包括其父类中的字段
如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFields) 获得一个类中所有字段列表,直接反射获取,无缓存
如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
getFieldsValue(Object obj) 获取所有字段的值
getFieldValue(Object obj, Field field) 获取字段值
getFieldValue(Object obj, String fieldName) 获取字段值
getMethod(Class clazz, boolean ignoreCase, String methodName, Class... paramTypes) 查找指定方法 如果找不到对应的方法则返回null
getMethod(Class clazz, String methodName, Class... paramTypes) 查找指定方法 如果找不到对应的方法则返回null
getMethodByName(Class<?> clazz, boolean ignoreCase, String methodName) 按照方法名查找指定方法名的方法,只返回匹配到的第一个方法,如果找不到对应的方法则返回null
getMethodByName(Class<?> clazz, String methodName) 按照方法名查找指定方法名的方法,只返回匹配到的第一个方法,如果找不到对应的方法则返回null
getMethodByNameIgnoreCase(Class<?> clazz, String methodName) 按照方法名查找指定方法名的方法,只返回匹配到的第一个方法,如果找不到对应的方法则返回null
getMethodIgnoreCase(Class clazz, String methodName, Class... paramTypes) 忽略大小写查找指定方法,如果找不到对应的方法则返回null
getMethodNames(Class<?> clazz) 获得指定类中的Public方法名
去重重载的方法
getMethodOfObj(Object obj, String methodName, Object... args) 查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法
getMethods(Class<?> beanClass) 获得一个类中所有方法列表,包括其父类中的方法
getMethods(Class<?> clazz, Filter filter) 获得指定类过滤后的Public方法列表
getMethodsDirectly(Class<?> beanClass, boolean withSuperClassMethods) 获得一个类中所有方法列表,直接反射获取,无缓存
getPublicMethod(Class clazz, String methodName, Class... paramTypes) 查找指定Public方法 如果找不到对应的方法或方法不为public的则返回null
getPublicMethodNames(Class<?> clazz) 获得指定类本类及其父类中的Public方法名
去重重载的方法
getPublicMethods(Class<?> clazz) 获得本类及其父类所有Public方法
getPublicMethods(Class<?> clazz, Filter filter) 获得指定类过滤后的Public方法列表
getPublicMethods(Class<?> clazz, Method... excludeMethods) 获得指定类过滤后的Public方法列表
getPublicMethods(Class<?> clazz, String... excludeMethodNames) 获得指定类过滤后的Public方法列表
getStaticFieldValue(Field field) 获取静态字段值
hasField(Class<?> beanClass, String name) 查找指定类中是否包含指定名称对应的字段,包括所有字段(包括非public字段),也包括父类和Object类的字段
invoke(Object obj, Method method, Object... args) 执行方法
invoke(Object obj, String methodName, Object... args) 执行对象中指定方法 如果需要传递的参数为null,请使用NullWrapperBean来传递,不然会丢失类型信息
invokeStatic(Method method, Object... args) 执行静态方法
invokeWithCheck(Object obj, Method method, Object... args) 执行方法
执行前要检查给定参数:
isEmptyParam(Method method) 是否为无参数方法
isEqualsMethod(Method method) 是否为equals方法
isHashCodeMethod(Method method) 是否为hashCode方法
isToStringMethod(Method method) 是否为toString方法
newInstance(Class clazz, Object... params) 实例化对象
newInstance(String clazz) 实例化对象
newInstanceIfPossible(Class beanClass) 尝试遍历并调用此类的所有构造方法,直到构造成功并返回
setAccessible(T accessibleObject) 设置方法为可访问(私有方法可以被外部调用)
setFieldValue(Object obj, Field field, Object value) 设置字段值
setFieldValue(Object obj, String fieldName, Object value) 设置字段值

ReUtil

正则相关工具类

常用正则请见 Validator

方法 介绍
contains(Pattern pattern, CharSequence content) 指定内容中是否有表达式匹配的内容
contains(String regex, CharSequence content) 指定内容中是否有表达式匹配的内容
count(Pattern pattern, CharSequence content) 计算指定字符串中,匹配pattern的个数
count(String regex, CharSequence content) 计算指定字符串中,匹配pattern的个数
delAll(Pattern pattern, CharSequence content) 删除匹配的全部内容
delAll(String regex, CharSequence content) 删除匹配的全部内容
delFirst(Pattern pattern, CharSequence content) 删除匹配的第一个内容
delFirst(String regex, CharSequence content) 删除匹配的第一个内容
delLast(Pattern pattern, CharSequence str) 删除匹配的最后一个内容
delLast(String regex, CharSequence str) 删除匹配的最后一个内容
delPre(Pattern pattern, CharSequence content) 删除正则匹配到的内容之前的字符 如果没有找到,则返回原文
delPre(String regex, CharSequence content) 删除正则匹配到的内容之前的字符 如果没有找到,则返回原文
escape(char c) 转义字符,将正则的关键字转义
escape(CharSequence content) 转义字符串,将正则的关键字转义
extractMulti(Pattern pattern, CharSequence content, String template) 从content中匹配出多个值并根据template生成新的字符串
例如:
content 2013年5月 pattern (.?)年(.?)月 template: $1-$2 return 2013-5
extractMulti(String regex, CharSequence content, String template) 从content中匹配出多个值并根据template生成新的字符串
匹配结束后会删除匹配内容之前的内容(包括匹配内容)
例如:
content 2013年5月 pattern (.?)年(.?)月 template: $1-$2 return 2013-5
extractMultiAndDelPre(Pattern pattern, Holder contentHolder, String template) 从content中匹配出多个值并根据template生成新的字符串
匹配结束后会删除匹配内容之前的内容(包括匹配内容)
例如:
content 2013年5月 pattern (.?)年(.?)月 template: $1-$2 return 2013-5
extractMultiAndDelPre(String regex, Holder contentHolder, String template) 从content中匹配出多个值并根据template生成新的字符串
例如:
content 2013年5月 pattern (.?)年(.?)月 template: $1-$2 return 2013-5
findAll(Pattern pattern, CharSequence content, Consumer consumer) 取得内容中匹配的所有结果,使用Consumer完成匹配结果处理
findAll(Pattern pattern, CharSequence content, int group) 取得内容中匹配的所有结果
findAll(Pattern pattern, CharSequence content, int group, T collection) 取得内容中匹配的所有结果
findAll(String regex, CharSequence content, int group) 取得内容中匹配的所有结果
findAll(String regex, CharSequence content, int group, T collection) 取得内容中匹配的所有结果
findAllGroup0(Pattern pattern, CharSequence content) 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容
findAllGroup0(String regex, CharSequence content) 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容
findAllGroup1(Pattern pattern, CharSequence content) 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容
findAllGroup1(String regex, CharSequence content) 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容
get(Pattern pattern, CharSequence content, Consumer consumer) 在给定字符串中查找给定规则的字符,如果找到则使用Consumer处理之
如果内容中有多个匹配项,则只处理找到的第一个结果。
get(Pattern pattern, CharSequence content, int groupIndex) 获得匹配的字符串,对应分组0表示整个匹配内容,1表示第一个括号分组内容,依次类推
get(Pattern pattern, CharSequence content, String groupName) 获得匹配的字符串
get(String regex, CharSequence content, int groupIndex) 获得匹配的字符串
get(String regex, CharSequence content, String groupName) 获得匹配的字符串
getAllGroupNames(Pattern pattern, CharSequence content) 根据给定正则查找字符串中的匹配项,返回所有匹配的分组名对应分组值
getAllGroups(Pattern pattern, CharSequence content) 获得匹配的字符串匹配到的所有分组
getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0) 获得匹配的字符串匹配到的所有分组
getFirstNumber(CharSequence StringWithNumber) 从字符串中获得第一个整数
getGroup0(Pattern pattern, CharSequence content) 获得匹配的字符串,,获得正则中分组0的内容
getGroup0(String regex, CharSequence content) 获得匹配的字符串,获得正则中分组0的内容
getGroup1(Pattern pattern, CharSequence content) 获得匹配的字符串,获得正则中分组1的内容
getGroup1(String regex, CharSequence content) 获得匹配的字符串,获得正则中分组1的内容
indexOf(Pattern pattern, CharSequence content) 找到指定模式匹配到字符串的开始位置
indexOf(String regex, CharSequence content) 找到指定正则匹配到字符串的开始位置
isMatch(Pattern pattern, CharSequence content) 给定内容是否匹配正则
isMatch(String regex, CharSequence content) 给定内容是否匹配正则
lastIndexOf(Pattern pattern, CharSequence content) 找到指定模式匹配到最后一个字符串的位置
lastIndexOf(String regex, CharSequence content) 找到指定正则匹配到第一个字符串的位置
replaceAll(CharSequence str, Pattern pattern, Func1<Matcher,String> replaceFun) 替换所有正则匹配的文本,并使用自定义函数决定如何替换
replaceFun可以通过Matcher提取出匹配到的内容的不同部分,然后经过重新处理、组装变成新的内容放回原位。
replaceAll(this.content, "(\d+)", parameters -> "-" + parameters.group(1) + "-") // 结果为:"ZZZaaabbbccc中文-1234-"
replaceAll(CharSequence content, Pattern pattern, String replacementTemplate) 正则替换指定值
通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
replaceAll(CharSequence str, String regex, Func1<Matcher,String> replaceFun) 替换所有正则匹配的文本,并使用自定义函数决定如何替换
replaceFun可以通过Matcher提取出匹配到的内容的不同部分,然后经过重新处理、组装变成新的内容放回原位。
replaceAll(this.content, "(\d+)", parameters -> "-" + parameters.group(1) + "-") // 结果为:"ZZZaaabbbccc中文-1234-"
replaceAll(CharSequence content, String regex, String replacementTemplate) 正则替换指定值
通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
replaceFirst(Pattern pattern, CharSequence content, String replacement) 替换匹配的第一个内容

RuntimeUtil

系统运行时工具类,用于执行系统命令的工具

方法 介绍
addShutdownHook(Runnable hook) 增加一个JVM关闭后的钩子,用于在JVM关闭时执行某些操作
destroy(Process process) 销毁进程
exec(String... cmds) 执行命令
命令带参数时参数可作为其中一个参数,也可以将命令和参数组合为一个字符串传入
exec(String[] envp, File dir, String... cmds) 执行命令
命令带参数时参数可作为其中一个参数,也可以将命令和参数组合为一个字符串传入
exec(String[] envp, String... cmds) 执行命令
命令带参数时参数可作为其中一个参数,也可以将命令和参数组合为一个字符串传入
execForLines(Charset charset, String... cmds) 执行系统命令,使用系统默认编码
execForLines(String... cmds) 执行系统命令,使用系统默认编码
execForStr(Charset charset, String... cmds) 执行系统命令,使用系统默认编码
execForStr(String... cmds) 执行系统命令,使用系统默认编码
getErrorResult(Process process) 获取命令执行异常结果,使用系统默认编码,,获取后销毁进程
getErrorResult(Process process, Charset charset) 获取命令执行异常结果,获取后销毁进程
getFreeMemory() 获得JVM中剩余的内存数,单位byte
getMaxMemory() 获得JVM中可以从系统中获取的最大的内存数,单位byte,以-Xmx参数为准
getPid() 获取当前进程ID,首先获取进程名称,读取@前的ID值,如果不存在,则读取进程名的hash值
getProcessorCount() 获得JVM可用的处理器数量(一般为CPU核心数)
getResult(Process process) 获取命令执行结果,使用系统默认编码,,获取后销毁进程
getResult(Process process, Charset charset) 获取命令执行结果,获取后销毁进程
getResultLines(Process process) 获取命令执行结果,使用系统默认编码,获取后销毁进程
getResultLines(Process process, Charset charset) 获取命令执行结果,使用系统默认编码,获取后销毁进程
getTotalMemory() 获得JVM已经从系统中获取到的总共的内存数,单位byte
getUsableMemory() 获得JVM最大可用内存,计算方法为:
最大内存-总内存+剩余内存

SerializeUtil

序列化工具类

方法 介绍
clone(T obj) 序列化后拷贝流的方式克隆
对象必须实现Serializable接口
deserialize(byte[] bytes) 反序列化
对象必须实现Serializable接口
serialize(T obj) 序列化
对象必须实现Serializable接口

ServiceLoaderUtil

SPI机制中的服务加载工具类,流程如下

方法 介绍
load(Class clazz) 加载服务
load(Class clazz, ClassLoader loader) 加载服务
loadFirst(Class clazz) 加载第一个服务,如果用户定义了多个接口实现类,只获取第一个。
loadFirstAvailable(Class clazz) 。加载第一个可用服务,如果用户定义了多个接口实现类,只获取第一个不报错的服务
loadList(Class clazz) 加载服务 并已list列表返回
loadList(Class clazz, ClassLoader loader) 加载服务 并已list列表返回

StrUtil

字符串工具类

方法 介绍
builder() 创建StringBuilder对象
builder(int capacity) 创建StringBuilder对象
fill(String str, char filledChar, int len, boolean isPre) 将已有字符串填充为规定长度,如果已有字符串超过这个长度则返回这个字符串
fillAfter(String str, char filledChar, int len) 将已有字符串填充为规定长度,如果已有字符串超过这个长度则返回这个字符串
字符填充于字符串后
fillBefore(String str, char filledChar, int len) 将已有字符串填充为规定长度,如果已有字符串超过这个长度则返回这个字符串
字符填充于字符串前
format(CharSequence template, Map map) 格式化文本,使用 {varName} 占位
map = {a: "aValue", b: "bValue"} format("{a} and {b}", map) ---=》 aValue and bValue
format(CharSequence template, Map map, boolean ignoreNull) 格式化文本,使用 {varName} 占位
map = {a: "aValue", b: "bValue"} format("{a} and {b}", map) ---=》 aValue and bValue
getReader(CharSequence str) 获得StringReader
getWriter() 获得StringWriter
isBlankIfStr(Object obj) 如果对象是字符串是否为空白,空白的定义如下:
isEmptyIfStr(Object obj) 如果对象是字符串是否为空串,空的定义如下:
reverse(String str) 反转字符串
例如:abcd =》dcba
similar(String str1, String str2) 计算两个字符串的相似度
similar(String str1, String str2, int scale) 计算两个字符串的相似度百分比
str(byte[] data, Charset charset) 解码字节码
str(Byte[] data, Charset charset) 解码字节码
str(byte[] bytes, String charset) 将byte数组转为字符串
str(Byte[] bytes, String charset) 将Byte数组转为字符串
str(ByteBuffer data, Charset charset) 将编码的byteBuffer数据转换为字符串
str(ByteBuffer data, String charset) 将编码的byteBuffer数据转换为字符串
str(Object obj, Charset charset) 将对象转为字符串
str(Object obj, String charsetName) Deprecated.
请使用 str(Object, Charset)
strBuilder() 创建StrBuilder对象
strBuilder(int capacity) 创建StrBuilder对象
toString(Object obj) 调用对象的toString方法,null会返回“null”
trim(String[] strs) 给定字符串数组全部做去首尾空格
utf8Str(Object obj) 将对象转为字符串
uuid() 生成随机UUID

TypeUtil

针对 Type 的工具类封装

最主要功能包括:

方法 介绍
getActualType(Type type, Field field) 获得泛型字段对应的泛型实际类型,如果此变量没有对应的实际类型,返回null
getActualType(Type type, ParameterizedType parameterizedType) 获得泛型变量对应的泛型实际类型,如果此变量没有对应的实际类型,返回null 此方法可以处理复杂的泛型化对象,类似于Map<User, Key>
getActualType(Type type, Type typeVariable) 获得泛型变量对应的泛型实际类型,如果此变量没有对应的实际类型,返回null 此方法可以处理:
getActualTypes(Type type, Type... typeVariables) 获得泛型变量对应的泛型实际类型,如果此变量没有对应的实际类型,返回null
getClass(Field field) 获得Field对应的原始类
getClass(Type type) 获得Type对应的原始类
getFieldType(Class<?> clazz, String fieldName) 获得字段的泛型类型
getFirstParamClass(Method method) 获取方法的第一个参数类
getFirstParamType(Method method) 获取方法的第一个参数类型
优先获取方法的GenericParameterTypes,如果获取不到,则获取ParameterTypes
getParamClass(Method method, int index) 获取方法的参数类
getParamClasses(Method method) 解析方法的参数类型列表
依赖jre\lib\rt.jar
getParamType(Method method, int index) 获取方法的参数类型
优先获取方法的GenericParameterTypes,如果获取不到,则获取ParameterTypes
getParamTypes(Method method) 获取方法的参数类型列表
优先获取方法的GenericParameterTypes,如果获取不到,则获取ParameterTypes
getReturnClass(Method method) 解析方法的返回类型类列表
getReturnType(Method method) 获取方法的返回值类型
获取方法的GenericReturnType
getType(Field field) 获取字段对应的Type类型
方法优先获取GenericType,获取不到则获取Type
getTypeArgument(Type type) 获得给定类的第一个泛型参数
getTypeArgument(Type type, int index) 获得给定类的泛型参数
getTypeArguments(Type type) 获得指定类型中所有泛型参数类型,例如:
getTypeMap(Class<?> clazz) 获取泛型变量和泛型实际类型的对应关系Map,例如:
hasTypeVariable(Type... types) 指定泛型数组中是否含有泛型变量
isUnknown(Type type) 是否未知类型
type为null或者TypeVariable 都视为未知类型
toParameterizedType(Type type) 将Type 转换为ParameterizedType
ParameterizedType用于获取当前类或父类中泛型参数化后的类型
一般用于获取泛型参数具体的参数类型,例如:

URLUtil

URL(Uniform Resource Locator)统一资源定位符相关工具类

方法 介绍
buildQuery(Map<String,?> paramMap, Charset charset) 将Map形式的Form表单数据转换为Url参数形式
paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("")
会自动url编码键和值
completeUrl(String baseUrl, String relativePath) 补全相对路径
decode(String url) 解码URL
将%开头的16进制表示的内容解码。
decode(String content, Charset charset) 解码application/x-www-form-urlencoded字符
将%开头的16进制表示的内容解码。
decode(String content, Charset charset, boolean isPlusToSpace) 解码application/x-www-form-urlencoded字符
将%开头的16进制表示的内容解码。
decode(String content, String charset) 解码application/x-www-form-urlencoded字符
将%开头的16进制表示的内容解码。
encodeBlank(CharSequence urlStr) 单独编码URL中的空白符,空白符编码为%20
getContentLength(URL url) 获取指定URL对应资源的内容长度,对于Http,其长度使用Content-Length头决定。
getDataUri(String mimeType, Charset charset, String encoding, String data) Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,
目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。
getDataUri(String mimeType, String encoding, String data) Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,
目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。
getDataUriBase64(String mimeType, String data) Data URI Scheme封装,数据格式为Base64。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,
目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。
getDecodedPath(URL url) 从URL对象中获取不被编码的路径Path
对于本地路径,URL对象的getPath方法对于包含中文或空格时会被编码,导致本读路径读取错误。
此方法将URL转为URI后获取路径用于解决路径被编码的问题
getHost(URL url) 获取URL中域名部分,只保留URL中的协议(Protocol)、Host,其它为null。
getJarFile(URL url) 从URL中获取JarFile
getPath(String uriStr) 获得path部分
getReader(URL url, Charset charset) 获得Reader
getStream(URL url) 从URL中获取流
getStringURI(CharSequence content) 获取string协议的URL,类似于string:///xxxxx
getURL(File file) 获得URL,常用于使用绝对路径时的情况
getURL(String pathBaseClassLoader) 获得URL
getURL(String path, Class<?> clazz) 获得URL
getURLs(File... files) 获得URL,常用于使用绝对路径时的情况
isFileURL(URL url) 提供的URL是否为文件
文件协议包括"file", "vfsfile" 或 "vfs".
isJarFileURL(URL url) 提供的URL是否为Jar文件URL 判断依据为file协议且扩展名为.jar
isJarURL(URL url) 提供的URL是否为jar包URL 协议包括: "jar", "zip", "vfszip" 或 "wsjar".
normalize(String url) 标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/
normalize(String url, boolean isEncodePath) 标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/
normalize(String url, boolean isEncodePath, boolean replaceSlash) 标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/ 如果replaceSlash为true,则替换多个/为一个
toURI(String location) 转字符串为URI
toURI(String location, boolean isEncode) 转字符串为URI
toURI(URL url) 转URL为URI
toURI(URL url, boolean isEncode) 转URL为URI
toUrlForHttp(String urlStr) 将URL字符串转换为URL对象,并做必要验证
toUrlForHttp(String urlStr, URLStreamHandler handler) 将URL字符串转换为URL对象,并做必要验证
url(String url) 通过一个字符串形式的URL地址创建URL对象
url(String url, URLStreamHandler handler) 通过一个字符串形式的URL地址创建URL对象

XmlUtil

XML工具类

此工具使用w3c dom工具,不需要依赖第三方包。

工具类封装了XML文档的创建、读取、写出和部分XML操作

方法 介绍
append(Node node, Object data) 追加数据子节点,可以是Map、集合、文本
appendChild(Node node, String tagName) 在已有节点上创建子节点
appendChild(Node node, String tagName, String namespace) 在已有节点上创建子节点
appendText(Node node, CharSequence text) 创建文本子节点
beanToXml(Object bean) 将Bean转换为XML
beanToXml(Object bean, String namespace) 将Bean转换为XML
beanToXml(Object bean, String namespace, boolean ignoreNull) 将Bean转换为XML
cleanComment(String xmlContent) 去除XML文本中的注释内容
cleanInvalid(String xmlContent) 去除XML文本中的无效字符
createDocumentBuilder() 创建 DocumentBuilder
createDocumentBuilderFactory() 创建DocumentBuilderFactory
createXml() 创建XML文档
创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
createXml(String rootElementName) 创建XML文档
创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
createXml(String rootElementName, String namespace) 创建XML文档
创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
createXPath() 创建XPath
Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
disableDefaultDocumentBuilderFactory() 禁用默认的DocumentBuilderFactory,禁用后如果有第三方的实现(如oracle的xdb包中的xmlparse),将会自动加载实现。
elementText(Element element, String tagName) 根据节点名获得第一个子节点
elementText(Element element, String tagName, String defaultValue) 根据节点名获得第一个子节点
escape(String string) 转义XML特殊字符:
format(Document doc) 格式化XML输出
format(String xmlStr) 格式化XML输出
getByXPath(String expression, Object source, QName returnType) 通过XPath方式读取XML节点等信息
Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
getByXPath(String expression, Object source, QName returnType, NamespaceContext nsContext) 通过XPath方式读取XML节点等信息
Xpath相关文章:
https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
https://www.ibm.com/developerworks/cn/xml/x-nmspccontext/
getElement(Element element, String tagName) 根据节点名获得第一个子节点
getElementByXPath(String expression, Object source) 通过XPath方式读取XML节点等信息
Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
getElements(Element element, String tagName) 根据节点名获得子节点列表
getNodeByXPath(String expression, Object source) 通过XPath方式读取XML节点等信息
Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
getNodeListByXPath(String expression, Object source) 通过XPath方式读取XML的NodeList
Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
getOwnerDocument(Node node) 获取节点所在的Document
getRootElement(Document doc) 获得XML文档根节点
isElement(Node node) 给定节点是否为Element 类型节点
mapToXml(Map data, String rootName) 将Map转换为XML
mapToXml(Map data, String rootName, String namespace) 将Map转换为XML
mapToXmlStr(Map data) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, boolean omitXmlDeclaration) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, String rootName) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, String rootName, String namespace) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, String rootName, String namespace, boolean omitXmlDeclaration) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, String rootName, String namespace, boolean isPretty, boolean omitXmlDeclaration) 将Map转换为XML格式的字符串
mapToXmlStr(Map data, String rootName, String namespace, String charset, boolean isPretty, boolean omitXmlDeclaration) 将Map转换为XML格式的字符串
parseXml(String xmlStr) 将String类型的XML转换为XML文档
readBySax(File file, ContentHandler contentHandler) 使用Sax方式读取指定的XML
如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
readBySax(InputSource source, ContentHandler contentHandler) 使用Sax方式读取指定的XML
如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
readBySax(InputStream source, ContentHandler contentHandler) 使用Sax方式读取指定的XML
如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
readBySax(Reader reader, ContentHandler contentHandler) 使用Sax方式读取指定的XML
如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
readObjectFromXml(File source) 从XML中读取对象 Reads serialized object from the XML file.
readObjectFromXml(InputSource source) 从XML中读取对象 Reads serialized object from the XML file.
readObjectFromXml(String xmlStr) 从XML中读取对象 Reads serialized object from the XML file.
readXML(File file) 读取解析XML文件
readXML(InputSource source) 读取解析XML文件
编码在XML中定义
readXML(InputStream inputStream) 读取解析XML文件
编码在XML中定义
readXML(Reader reader) 读取解析XML文件
readXML(String pathOrContent) 读取解析XML文件
如果给定内容以“<”开头,表示这是一个XML内容,直接读取,否则按照路径处理
路径可以为相对路径,也可以是绝对路径,相对路径相对于ClassPath
setNamespaceAware(boolean isNamespaceAware) 设置是否打开命名空间支持,默认打开
toFile(Document doc, String absolutePath) 将XML文档写入到文件
使用Document中的编码
toFile(Document doc, String path, String charset) 将XML文档写入到文件
toStr(Document doc) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
默认非格式化输出,若想格式化请使用format(Document)
toStr(Document doc, boolean isPretty) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
toStr(Document doc, String charset, boolean isPretty) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
toStr(Node doc) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
默认非格式化输出,若想格式化请使用format(Document)
toStr(Node doc, boolean isPretty) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
toStr(Node doc, String charset, boolean isPretty) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
toStr(Node doc, String charset, boolean isPretty, boolean omitXmlDeclaration) 将XML文档转换为String
字符编码使用XML文档中的编码,获取不到则使用UTF-8
transElements(Element parentEle, NodeList nodeList) 将NodeList转换为Element列表
非Element节点将被忽略
transElements(NodeList nodeList) 将NodeList转换为Element列表
transform(Source source, Result result, String charset, int indent) 将XML文档写出
格式化输出逻辑参考:https://stackoverflow.com/questions/139076/how-to-pretty-print-xml-from-java
transform(Source source, Result result, String charset, int indent, boolean omitXmlDeclaration) 将XML文档写出
格式化输出逻辑参考:https://stackoverflow.com/questions/139076/how-to-pretty-print-xml-from-java
unescape(String string) 反转义XML特殊字符:
write(Node node, OutputStream out, String charset, int indent) 将XML文档写出
write(Node node, OutputStream out, String charset, int indent, boolean omitXmlDeclaration) 将XML文档写出
write(Node node, Writer writer, String charset, int indent) 将XML文档写出
write(Node node, Writer writer, String charset, int indent, boolean omitXmlDeclaration) 将XML文档写出
writeObjectAsXml(File dest, Object bean) 将可序列化的对象转换为XML写入文件,已经存在的文件将被覆盖
Writes serializable object to a XML file.
xmlToBean(Node node, Class bean) XML转Java Bean
xmlToMap(Node node) XML格式字符串转换为Map
xmlToMap(Node node, Map<String,Object> result) XML节点转换为Map
xmlToMap(String xmlStr) XML格式字符串转换为Map
xmlToMap(String xmlStr, Map<String,Object> result) XML格式字符串转换为Map
只支持第一级别的XML,不支持多级XML

ZipUtil

压缩工具类

方法 介绍
append(Path zipPath, Path appendFilePath, CopyOption... options) 在zip文件中添加新文件或目录
新文件添加在zip根目录,文件夹包括其本身和内容
如果待添加文件夹是系统根路径(如/或c:/),则只复制文件夹下的内容
get(File zipFile, Charset charset, String path) 获取压缩包中的指定文件流
get(ZipFile zipFile, String path) 获取压缩包中的指定文件流
getStream(ZipFile zipFile, ZipEntry zipEntry) 获取指定ZipEntry的流,用于读取这个entry的内容
gzip(byte[] buf) Gzip压缩处理
gzip(File file) Gzip压缩文件
gzip(InputStream in) Gzip压缩文件
gzip(InputStream in, int length) Gzip压缩文件
gzip(String content, String charset) Gzip压缩处理
listFileNames(ZipFile zipFile, String dir) 获取Zip文件中指定目录下的所有文件,只显示文件,不显示目录
read(ZipFile zipFile, Consumer consumer) 读取并处理Zip文件中的每一个ZipEntry
read(ZipInputStream zipStream, Consumer consumer) 读取并处理Zip流中的每一个ZipEntry
toZipFile(File file, Charset charset) 将Zip文件转换为ZipFile
unGzip(byte[] buf) Gzip解压处理
unGzip(byte[] buf, String charset) Gzip解压缩处理
unGzip(InputStream in) Gzip解压处理
unGzip(InputStream in, int length) Gzip解压处理
unzip(File zipFile) 解压到文件名相同的目录中,使用UTF-8编码
unzip(File zipFile, Charset charset) 解压到文件名相同的目录中
unzip(File zipFile, File outFile) 解压,默认使用UTF-8编码
unzip(File zipFile, File outFile, Charset charset) 解压
unzip(InputStream in, File outFile, Charset charset) 解压
ZIP条目不使用高速缓冲。
unzip(String zipFilePath) 解压到文件名相同的目录中,默认编码UTF-8
unzip(String zipFilePath, Charset charset) 解压到文件名相同的目录中
unzip(String zipFilePath, String outFileDir) 解压,默认UTF-8编码
unzip(String zipFilePath, String outFileDir, Charset charset) 解压
unzip(ZipFile zipFile, File outFile) 解压
unzip(ZipInputStream zipStream, File outFile) 解压
ZIP条目不使用高速缓冲。
unzipFileBytes(File zipFile, Charset charset, String name) 从Zip文件中提取指定的文件为bytes
unzipFileBytes(File zipFile, String name) 从Zip文件中提取指定的文件为bytes
unzipFileBytes(String zipFilePath, Charset charset, String name) 从Zip文件中提取指定的文件为bytes
unzipFileBytes(String zipFilePath, String name) 从Zip文件中提取指定的文件为bytes
unZlib(byte[] buf) 解压缩zlib
unZlib(byte[] buf, String charset) Zlib解压缩处理
unZlib(InputStream in) 解压缩zlib
unZlib(InputStream in, int length) 解压缩zlib
zip(File srcFile) 打包到当前目录,使用默认编码UTF-8
zip(File zipFile, boolean withSrcDir, File... srcFiles) 对文件或文件目录进行压缩
使用默认UTF-8编码
zip(File srcFile, Charset charset) 打包到当前目录
zip(File zipFile, Charset charset, boolean withSrcDir, File... srcFiles) 对文件或文件目录进行压缩
zip(File zipFile, Charset charset, boolean withSrcDir, FileFilter filter, File... srcFiles) 对文件或文件目录进行压缩
zip(File zipFile, Charset charset, Resource... resources) 对流中的数据加入到压缩文件
路径列表和流列表长度必须一致
zip(File zipFile, String[] paths, InputStream[] ins) 对流中的数据加入到压缩文件
路径列表和流列表长度必须一致
zip(File zipFile, String[] paths, InputStream[] ins, Charset charset) 对流中的数据加入到压缩文件
路径列表和流列表长度必须一致
zip(File zipFile, String path, InputStream in) 对流中的数据加入到压缩文件
使用默认编码UTF-8
zip(File zipFile, String path, InputStream in, Charset charset) 对流中的数据加入到压缩文件
zip(File zipFile, String path, String data) 对流中的数据加入到压缩文件,使用默认UTF-8编码
zip(File zipFile, String path, String data, Charset charset) 对流中的数据加入到压缩文件
zip(OutputStream out, Charset charset, boolean withSrcDir, FileFilter filter, File... srcFiles) 对文件或文件目录进行压缩
zip(OutputStream out, String[] paths, InputStream[] ins) 将文件流压缩到目标流中
zip(String srcPath) 打包到当前目录,使用默认编码UTF-8
zip(String srcPath, Charset charset) 打包到当前目录
zip(String srcPath, String zipPath) 对文件或文件目录进行压缩
不包含被打包目录
zip(String srcPath, String zipPath, boolean withSrcDir) 对文件或文件目录进行压缩
zip(String srcPath, String zipPath, Charset charset, boolean withSrcDir) 对文件或文件目录进行压缩
zip(ZipOutputStream zipOutputStream, boolean withSrcDir, FileFilter filter, File... srcFiles) Deprecated.
请使用 zip(OutputStream, Charset, boolean, FileFilter, File...)
zip(ZipOutputStream zipOutputStream, String[] paths, InputStream[] ins) 将文件流压缩到目标流中
zlib(byte[] buf, int level) 打成Zlib压缩包
zlib(File file, int level) Zlib压缩文件
zlib(InputStream in, int level) 打成Zlib压缩包
zlib(InputStream in, int level, int length) 打成Zlib压缩包
zlib(String content, String charset, int level) Zlib压缩处理

CronUtil

定时任务工具类

此工具持有一个全局Scheduler,所有定时任务在同一个调度器中执行

CronUtil.setMatchSecond(boolean) 方法用于定义是否使用秒匹配模式,如果为true,则定时任务表达式中的第一位为秒,否则为分,默认是分

方法 介绍
getScheduler()
remove(String schedulerId) 移除任务
restart() 重新启动定时任务
此方法会清除动态加载的任务,重新启动后,守护线程与否与之前保持一致
schedule(Setting cronSetting) 批量加入配置文件中的定时任务
schedule(String schedulingPattern, Runnable task) 加入定时任务
schedule(String id, String schedulingPattern, Task task) 加入定时任务
schedule(String schedulingPattern, Task task) 加入定时任务
setCronSetting(Setting cronSetting) 自定义定时任务配置文件
setCronSetting(String cronSettingPath) 自定义定时任务配置文件路径
setMatchSecond(boolean isMatchSecond) 设置是否支持秒匹配
此方法用于定义是否使用秒匹配模式,如果为true,则定时任务表达式中的第一位为秒,否则为分,默认是分
start() 开始,非守护线程模式
start(boolean isDaemon) 开始
stop() 停止
updatePattern(String id, CronPattern pattern) 更新Task的执行时间规则

CronPatternUtil

定时任务表达式工具类

方法 介绍
matchedDates(CronPattern pattern, long start, long end, int count, boolean isMatchSecond) 列举指定日期范围内所有匹配表达式的日期
matchedDates(String patternStr, Date start, Date end, int count, boolean isMatchSecond) 列举指定日期范围内所有匹配表达式的日期
matchedDates(String patternStr, Date start, int count, boolean isMatchSecond) 列举指定日期之后(到开始日期对应年年底)内所有匹配表达式的日期
matchedDates(String patternStr, long start, long end, int count, boolean isMatchSecond) 列举指定日期范围内所有匹配表达式的日期
nextDateAfter(CronPattern pattern, Date start, boolean isMatchSecond) 列举指定日期之后(到开始日期对应年年底)内第一个匹配表达式的日期

ASN1Util

ASN.1 – Abstract Syntax Notation dot one,抽象记法1 工具类。

ASN.1描述了一种对数据进行表示、编码、传输和解码的数据格式。它的编码格式包括DER、BER、DL等

方法 介绍
decode(InputStream in) 读取ASN.1数据流为ASN1Object
encode(String asn1Encoding, org.bouncycastle.asn1.ASN1Encodable... elements) 编码为指定ASN1格式
encodeDer(org.bouncycastle.asn1.ASN1Encodable... elements) 编码为DER格式
encodeTo(String asn1Encoding, OutputStream out, org.bouncycastle.asn1.ASN1Encodable... elements) 编码为指定ASN1格式
getDumpStr(InputStream in) 获取ASN1格式的导出格式,一般用于调试

BCUtil

Bouncy Castle相关工具类封装

方法 介绍
decodeECPoint(byte[] encodeByte, String curveName) 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
decodeECPoint(String encode, String curveName) 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
见:https://www.cnblogs.com/xinzhao/p/8963724.html
encodeECPrivateKey(PrivateKey privateKey) 只获取私钥里的d,32字节
encodeECPublicKey(PublicKey publicKey) 编码压缩EC公钥(基于BouncyCastle),即Q值
见:https://www.cnblogs.com/xinzhao/p/8963724.html
encodeECPublicKey(PublicKey publicKey, boolean isCompressed) 编码压缩EC公钥(基于BouncyCastle),即Q值
见:https://www.cnblogs.com/xinzhao/p/8963724.html
readPemPrivateKey(InputStream pemStream) 读取PEM格式的私钥
readPemPublicKey(InputStream pemStream) 读取PEM格式的公钥
toDomainParams(org.bouncycastle.jce.spec.ECParameterSpec parameterSpec) 构建ECDomainParameters对象
toDomainParams(String curveName) 构建ECDomainParameters对象
toDomainParams(org.bouncycastle.asn1.x9.X9ECParameters x9ECParameters) 构建ECDomainParameters对象
toParams(BigInteger x, BigInteger y, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toParams(BigInteger d, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toParams(byte[] xBytes, byte[] yBytes, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toParams(byte[] d, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toParams(Key key) 密钥转换为AsymmetricKeyParameter
toParams(PrivateKey privateKey) 私钥转换为 ECPrivateKeyParameters
toParams(PublicKey publicKey) 公钥转换为 ECPublicKeyParameters
toParams(String dHex, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toParams(String xHex, String yHex, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPkcs1(PrivateKey privateKey) Java中的PKCS#8格式私钥转换为OpenSSL支持的PKCS#1格式
toPkcs1(PublicKey publicKey) Java中的X.509格式公钥转换为OpenSSL支持的PKCS#1格式
toSm2Params(BigInteger d) 转换为 ECPrivateKeyParameters
toSm2Params(byte[] d) 转换为 ECPrivateKeyParameters
toSm2Params(byte[] xBytes, byte[] yBytes) 转换为SM2的ECPublicKeyParameters
toSm2Params(String d) 转换为 ECPrivateKeyParameters
toSm2Params(String xHex, String yHex) 转换为SM2的ECPublicKeyParameters

ECKeyUtil

EC密钥参数相关工具类封装

方法 介绍
createOpenSSHPrivateKeySpec(byte[] key) 创建OpenSSHPrivateKeySpec
createOpenSSHPublicKeySpec(byte[] key) 创建OpenSSHPublicKeySpec
decodePrivateKeyParams(byte[] privateKeyBytes) 尝试解析转换各种类型私钥为ECPrivateKeyParameters,支持包括: D值 PKCS#8 PKCS#1
decodePublicKeyParams(byte[] publicKeyBytes) 尝试解析转换各种类型公钥为ECPublicKeyParameters,支持包括: Q值 X.509 PKCS#1
getPublicParams(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParameters) 根据私钥参数获取公钥参数
toParams(Key key) 密钥转换为AsymmetricKeyParameter
toPrivateParams(BigInteger d, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toPrivateParams(byte[] d, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toPrivateParams(PrivateKey privateKey) 私钥转换为 ECPrivateKeyParameters
toPrivateParams(String d, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为 ECPrivateKeyParameters
toPublicParams(BigInteger x, BigInteger y, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPublicParams(byte[] xBytes, byte[] yBytes, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPublicParams(byte[] pointEncoded, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPublicParams(org.bouncycastle.math.ec.ECPoint point, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPublicParams(PublicKey publicKey) 公钥转换为 ECPublicKeyParameters
toPublicParams(String pointEncoded, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toPublicParams(String x, String y, org.bouncycastle.crypto.params.ECDomainParameters domainParameters) 转换为ECPublicKeyParameters
toSm2PrivateKey(org.bouncycastle.asn1.sec.ECPrivateKey privateKey) 将SM2算法的ECPrivateKey 转换为 PrivateKey
toSm2PrivateParams(BigInteger d) 转换为 ECPrivateKeyParameters
toSm2PrivateParams(byte[] d) 转换为 ECPrivateKeyParameters
toSm2PrivateParams(String d) 转换为 ECPrivateKeyParameters
toSm2PublicParams(byte[] q) 转换为 ECPublicKeyParameters
toSm2PublicParams(byte[] xBytes, byte[] yBytes) 转换为SM2的ECPublicKeyParameters
toSm2PublicParams(String q) 转换为 ECPublicKeyParameters
toSm2PublicParams(String x, String y) 转换为SM2的ECPublicKeyParameters

KeyUtil

密钥工具类

方法 介绍
decodeECPoint(byte[] encodeByte, String curveName) 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
见:https://www.cnblogs.com/xinzhao/p/8963724.html
decodeECPoint(String encode, String curveName) 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
见:https://www.cnblogs.com/xinzhao/p/8963724.html
encodeECPublicKey(PublicKey publicKey) 编码压缩EC公钥(基于BouncyCastle)
见:https://www.cnblogs.com/xinzhao/p/8963724.html
generateDESKey(String algorithm, byte[] key) 生成 SecretKey
generateKey(String algorithm) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
generateKey(String algorithm, byte[] key) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
generateKey(String algorithm, int keySize) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
当指定keySize<0时,AES默认长度为128,其它算法不指定。
generateKey(String algorithm, int keySize, SecureRandom random) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
当指定keySize<0时,AES默认长度为128,其它算法不指定。
generateKey(String algorithm, KeySpec keySpec) 生成 SecretKey,仅用于对称加密和摘要算法
generateKeyPair(String algorithm) 生成用于非对称加密的公钥和私钥,仅用于非对称加密
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, AlgorithmParameterSpec params) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, byte[] seed, AlgorithmParameterSpec param) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize, byte[] seed) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize, byte[] seed, AlgorithmParameterSpec... params) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize, SecureRandom random, AlgorithmParameterSpec... params) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generatePBEKey(String algorithm, char[] key) 生成PBE SecretKey
generatePrivateKey(KeyStore keyStore, String alias, char[] password) 生成私钥,仅用于非对称加密
generatePrivateKey(String algorithm, byte[] key) 生成私钥,仅用于非对称加密
采用PKCS#8规范,此规范定义了私钥信息语法和加密私钥语法
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePrivateKey(String algorithm, KeySpec keySpec) 生成私钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePublicKey(String algorithm, byte[] key) 生成公钥,仅用于非对称加密
采用X509证书规范
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePublicKey(String algorithm, KeySpec keySpec) 生成公钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generateRSAPrivateKey(byte[] key) 生成RSA私钥,仅用于非对称加密
采用PKCS#8规范,此规范定义了私钥信息语法和加密私钥语法
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generateRSAPublicKey(byte[] key) 生成RSA公钥,仅用于非对称加密
采用X509证书规范
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
getAlgorithmAfterWith(String algorithm) 获取用于密钥生成的算法
获取XXXwithXXX算法的后半部分算法,如果为ECDSA或SM2,返回算法为EC
getCertificate(KeyStore keyStore, String alias) 获得 Certification
getCertificateFactory(String type) 获取CertificateFactory
getKeyFactory(String algorithm) 获取KeyFactory
getKeyGenerator(String algorithm) 获取KeyGenerator
getKeyPair(KeyStore keyStore, char[] password, String alias) 从KeyStore中获取私钥公钥
getKeyPair(String type, InputStream in, char[] password, String alias) 从KeyStore中获取私钥公钥
getKeyPairGenerator(String algorithm) 获取KeyPairGenerator
getMainAlgorithm(String algorithm) 获取主体算法名,例如RSA/ECB/PKCS1Padding的主体算法是RSA
getRSAPublicKey(BigInteger modulus, BigInteger publicExponent) 获得RSA公钥对象
getRSAPublicKey(PrivateKey privateKey) 通过RSA私钥生成RSA公钥
getRSAPublicKey(String modulus, String publicExponent) 获得RSA公钥对象
getSecretKeyFactory(String algorithm) 获取SecretKeyFactory
readCertificate(String type, InputStream in) 读取Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readCertificate(String type, InputStream in, char[] password, String alias) 读取Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readJKSKeyStore(File keyFile, char[] password) 读取密钥库(Java Key Store,JKS) KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readJKSKeyStore(InputStream in, char[] password) 读取密钥库(Java Key Store,JKS) KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readKeyStore(String type, File keyFile, char[] password) 读取KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readKeyStore(String type, InputStream in, char[] password) 读取KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readPKCS12KeyStore(File keyFile, char[] password) 读取PKCS12 KeyStore文件
KeyStore文件用于数字证书的密钥对保存
readPKCS12KeyStore(InputStream in, char[] password) 读取PKCS12 KeyStore文件
KeyStore文件用于数字证书的密钥对保存
readPublicKeyFromCert(InputStream in) 读取X.509 Certification文件中的公钥
Certification为证书文件
see: https://www.cnblogs.com/yinliang/p/10115519.html
readX509Certificate(InputStream in) 读取X.509 Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readX509Certificate(InputStream in, char[] password, String alias) 读取X.509 Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931

PemUtil

PEM(Privacy Enhanced Mail)格式相关工具类。(基于Bouncy Castle)

方法 介绍
readPem(InputStream keyStream) 从pem流中读取公钥或私钥
readPemKey(InputStream keyStream) 从pem文件中读取公钥或私钥
根据类型返回 PublicKey 或者 PrivateKey
readPemObject(InputStream keyStream) 读取pem文件中的信息,包括类型、头信息和密钥内容
readPemObject(Reader reader) 读取pem文件中的信息,包括类型、头信息和密钥内容
readPemPrivateKey(InputStream pemStream) 读取PEM格式的私钥
readPemPublicKey(InputStream pemStream) 读取PEM格式的公钥
readSm2PemPrivateKey(InputStream keyStream) 读取OpenSSL生成的ANS1格式的Pem私钥文件,必须为PKCS#1格式
toPem(String type, byte[] content) 将私钥或公钥转换为PEM格式的字符串
writePemObject(org.bouncycastle.util.io.pem.PemObjectGenerator pemObject, OutputStream keyStream) 写出pem密钥(私钥、公钥、证书)
writePemObject(org.bouncycastle.util.io.pem.PemObjectGenerator pemObject, Writer writer) 写出pem密钥(私钥、公钥、证书)
writePemObject(String type, byte[] content, OutputStream keyStream) 写出pem密钥(私钥、公钥、证书)
writePemObject(String type, byte[] content, Writer writer) 写出pem密钥(私钥、公钥、证书)

SecureUtil

安全相关工具类

加密分为三种:

1、对称加密(symmetric),例如:AES、DES等

2、非对称加密(asymmetric),例如:RSA、DSA等

3、摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等

方法 介绍
addProvider(Provider provider) 增加加密解密的算法提供者,默认优先使用,例如:
aes() AES加密,生成随机KEY。注意解密时必须使用相同 AES对象或者使用相同KEY
例:
aes(byte[] key) AES加密
例:
createCipher(String algorithm) 创建Cipher
createMac(String algorithm) 创建Mac
createMessageDigest(String algorithm) 创建MessageDigest
createSignature(String algorithm) 创建Signature
decode(String key) 解码字符串密钥,可支持的编码如下:
des() DES加密,生成随机KEY。注意解密时必须使用相同 DES对象或者使用相同KEY
例:
des(byte[] key) DES加密
例:
desede() DESede加密(又名3DES、TripleDES),生成随机KEY。注意解密时必须使用相同 DESede对象或者使用相同KEY
Java中默认实现为:DESede/ECB/PKCS5Padding
例:
desede(byte[] key) DESede加密(又名3DES、TripleDES)
Java中默认实现为:DESede/ECB/PKCS5Padding
例:
disableBouncyCastle() 强制关闭Bouncy Castle库的使用,全局有效
fpe(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper, byte[] tweak) FPE(Format Preserving Encryption)实现,支持FF1和FF3-1模式。
generateAlgorithm(AsymmetricAlgorithm asymmetricAlgorithm, DigestAlgorithm digestAlgorithm) 生成算法,格式为XXXwithXXX
generateDESKey(String algorithm, byte[] key) 生成 SecretKey
generateKey(String algorithm) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
generateKey(String algorithm, byte[] key) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
generateKey(String algorithm, int keySize) 生成 SecretKey,仅用于对称加密和摘要算法密钥生成
generateKey(String algorithm, KeySpec keySpec) 生成 SecretKey,仅用于对称加密和摘要算法
generateKeyPair(String algorithm) 生成用于非对称加密的公钥和私钥,仅用于非对称加密
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, AlgorithmParameterSpec params) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, byte[] seed, AlgorithmParameterSpec params) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generateKeyPair(String algorithm, int keySize, byte[] seed) 生成用于非对称加密的公钥和私钥
密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
generatePBEKey(String algorithm, char[] key) 生成PBE SecretKey
generatePrivateKey(KeyStore keyStore, String alias, char[] password) 生成私钥,仅用于非对称加密
generatePrivateKey(String algorithm, byte[] key) 生成私钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePrivateKey(String algorithm, KeySpec keySpec) 生成私钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePublicKey(String algorithm, byte[] key) 生成公钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generatePublicKey(String algorithm, KeySpec keySpec) 生成公钥,仅用于非对称加密
算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
generateSignature(AsymmetricAlgorithm asymmetricAlgorithm, DigestAlgorithm digestAlgorithm) 生成签名对象,仅用于非对称加密
getAlgorithmAfterWith(String algorithm) 获取用于密钥生成的算法
获取XXXwithXXX算法的后半部分算法,如果为ECDSA或SM2,返回算法为EC
getCertificate(KeyStore keyStore, String alias) 获得 Certification
hmac(HmacAlgorithm algorithm, byte[] key) 创建HMac对象,调用digest方法可获得hmac值
hmac(HmacAlgorithm algorithm, SecretKey key) 创建HMac对象,调用digest方法可获得hmac值
hmac(HmacAlgorithm algorithm, String key) 创建HMac对象,调用digest方法可获得hmac值
hmacMd5() HmacMD5加密器,生成随机KEY
例:
HmacMD5加密:hmacMd5().digest(data)
HmacMD5加密并转为16进制字符串:hmacMd5().digestHex(data)
hmacMd5(byte[] key) HmacMD5加密器
例:
HmacMD5加密:hmacMd5(key).digest(data)
HmacMD5加密并转为16进制字符串:hmacMd5(key).digestHex(data)
hmacMd5(String key) HmacMD5加密器
例:
HmacMD5加密:hmacMd5(key).digest(data)
HmacMD5加密并转为16进制字符串:hmacMd5(key).digestHex(data)
hmacSha1() HmacSHA1加密器,生成随机KEY
例:
HmacSHA1加密:hmacSha1().digest(data)
HmacSHA1加密并转为16进制字符串:hmacSha1().digestHex(data)
hmacSha1(byte[] key) HmacSHA1加密器
例:
HmacSHA1加密:hmacSha1(key).digest(data)
HmacSHA1加密并转为16进制字符串:hmacSha1(key).digestHex(data)
hmacSha1(String key) HmacSHA1加密器
例:
HmacSHA1加密:hmacSha1(key).digest(data)
HmacSHA1加密并转为16进制字符串:hmacSha1(key).digestHex(data)
hmacSha256() HmacSHA256加密器,生成随机KEY
例:
HmacSHA256加密:hmacSha256().digest(data)
HmacSHA256加密并转为16进制字符串:hmacSha256().digestHex(data)
hmacSha256(byte[] key) HmacSHA256加密器
例:
HmacSHA256加密:hmacSha256(key).digest(data)
HmacSHA256加密并转为16进制字符串:hmacSha256(key).digestHex(data)
hmacSha256(String key) HmacSHA256加密器
例:
HmacSHA256加密:hmacSha256(key).digest(data)
HmacSHA256加密并转为16进制字符串:hmacSha256(key).digestHex(data)
md5() MD5加密
例:
md5(File dataFile) MD5加密文件,生成16进制MD5字符串
md5(InputStream data) MD5加密,生成16进制MD5字符串
md5(String data) MD5加密,生成16进制MD5字符串
pbkdf2(char[] password, byte[] salt) PBKDF2加密密码
rc4(String key) RC4算法
readCertificate(String type, InputStream in) 读取Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readCertificate(String type, InputStream in, char[] password, String alias) 读取Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readJKSKeyStore(InputStream in, char[] password) 读取密钥库(Java Key Store,JKS) KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readKeyStore(String type, InputStream in, char[] password) 读取KeyStore文件
KeyStore文件用于数字证书的密钥对保存
see: http://snowolf.iteye.com/blog/391931
readX509Certificate(InputStream in) 读取X.509 Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
readX509Certificate(InputStream in, char[] password, String alias) 读取X.509 Certification文件
Certification为证书文件
see: http://snowolf.iteye.com/blog/391931
rsa() 创建RSA算法对象
生成新的私钥公钥对
rsa(byte[] privateKey, byte[] publicKey) 创建RSA算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
rsa(String privateKeyBase64, String publicKeyBase64) 创建RSA算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
sha1() SHA1加密
例:
SHA1加密:sha1().digest(data)
SHA1加密并转为16进制字符串:sha1().digestHex(data)
sha1(File dataFile) SHA1加密文件,生成16进制SHA1字符串
sha1(InputStream data) SHA1加密,生成16进制SHA1字符串
sha1(String data) SHA1加密,生成16进制SHA1字符串
sha256() SHA256加密
例:
SHA256加密:sha256().digest(data)
SHA256加密并转为16进制字符串:sha256().digestHex(data)
sha256(File dataFile) SHA256加密文件,生成16进制SHA256字符串
sha256(InputStream data) SHA256加密,生成16进制SHA256字符串
sha256(String data) SHA256加密,生成16进制SHA256字符串
sign(SignAlgorithm algorithm) 创建签名算法对象
生成新的私钥公钥对
sign(SignAlgorithm algorithm, byte[] privateKey, byte[] publicKey) 创建Sign算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
sign(SignAlgorithm algorithm, String privateKeyBase64, String publicKeyBase64) 创建签名算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
signParams(DigestAlgorithm digestAlgorithm, Map params, String... otherParams) 对参数做签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
signParams(DigestAlgorithm digestAlgorithm, Map params, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 对参数做签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
signParams(SymmetricCrypto crypto, Map params, String... otherParams) 对参数做签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
signParams(SymmetricCrypto crypto, Map params, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 对参数做签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
signParamsMd5(Map params, String... otherParams) 对参数做md5签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
signParamsSha1(Map params, String... otherParams) 对参数做Sha1签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
signParamsSha256(Map params, String... otherParams) 对参数做Sha256签名
参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
zuc128(byte[] key, byte[] iv) 祖冲之算法集(ZUC-128算法)实现,基于BouncyCastle实现。
zuc256(byte[] key, byte[] iv) 祖冲之算法集(ZUC-256算法)实现,基于BouncyCastle实现。

SmUtil

SM国密算法工具类

此工具类依赖org.bouncycastle:bcprov-jdk15to18

方法 介绍
changeC1C2C3ToC1C3C2(byte[] c1c2c3, org.bouncycastle.crypto.params.ECDomainParameters ecDomainParameters) bc加解密使用旧标c1
changeC1C3C2ToC1C2C3(byte[] c1c3c2, org.bouncycastle.crypto.params.ECDomainParameters ecDomainParameters) bc加解密使用旧标c1
createHmacSm3Engine(byte[] key) 创建HmacSM3算法的MacEngine
hmacSm3(byte[] key) HmacSM3算法实现
rsAsn1ToPlain(byte[] rsDer) BC的SM3withSM2签名得到的结果的rs是asn1格式的,这个方法转化成直接拼接r
rsPlainToAsn1(byte[] sign) BC的SM3withSM2验签需要的rs是asn1格式的,这个方法将直接拼接r
sm2() 创建SM2算法对象
生成新的私钥公钥对
sm2(byte[] privateKey, byte[] publicKey) 创建SM2算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
sm2(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParams, org.bouncycastle.crypto.params.ECPublicKeyParameters publicKeyParams) 创建SM2算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
sm2(PrivateKey privateKey, PublicKey publicKey) 创建SM2算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
sm2(String privateKeyStr, String publicKeyStr) 创建SM2算法对象
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
sm3() SM3加密
例:
SM3加密:sm3().digest(data)
SM3加密并转为16进制字符串:sm3().digestHex(data)
sm3(File dataFile) SM3加密文件,生成16进制SM3字符串
sm3(InputStream data) SM3加密,生成16进制SM3字符串
sm3(String data) SM3加密,生成16进制SM3字符串
sm4() SM4加密,生成随机KEY。注意解密时必须使用相同 SymmetricCrypto对象或者使用相同KEY
例:
sm4(byte[] key) SM4加密
例:

DigestUtil

摘要算法工具类

方法 介绍
bcrypt(String password) 生成Bcrypt加密后的密文
bcryptCheck(String password, String hashed) 验证密码是否与Bcrypt加密后的密文匹配
digester(DigestAlgorithm algorithm) 新建摘要器
digester(String algorithm) 新建摘要器
hmac(HmacAlgorithm algorithm, byte[] key) 创建HMac对象,调用digest方法可获得hmac值
hmac(HmacAlgorithm algorithm, SecretKey key) 创建HMac对象,调用digest方法可获得hmac值
md5(byte[] data) 计算32位MD5摘要值
md5(File file) 计算32位MD5摘要值
md5(InputStream data) 计算32位MD5摘要值
md5(String data) 计算32位MD5摘要值,使用UTF-8编码
md5(String data, String charset) 计算32位MD5摘要值
md5Hex(byte[] data) 计算32位MD5摘要值,并转为16进制字符串
md5Hex(File file) 计算32位MD5摘要值,并转为16进制字符串
md5Hex(InputStream data) 计算32位MD5摘要值,并转为16进制字符串
md5Hex(String data) 计算32位MD5摘要值,并转为16进制字符串
md5Hex(String data, Charset charset) 计算32位MD5摘要值,并转为16进制字符串
md5Hex(String data, String charset) 计算32位MD5摘要值,并转为16进制字符串
md5Hex16(byte[] data) 计算16位MD5摘要值,并转为16进制字符串
md5Hex16(File file) 计算16位MD5摘要值,并转为16进制字符串
md5Hex16(InputStream data) 计算16位MD5摘要值,并转为16进制字符串
md5Hex16(String data) 计算16位MD5摘要值,并转为16进制字符串
md5Hex16(String data, Charset charset) 计算16位MD5摘要值,并转为16进制字符串
md5HexTo16(String md5Hex) 32位MD5转16位MD5
sha1(byte[] data) 计算SHA-1摘要值
sha1(File file) 计算SHA-1摘要值
sha1(InputStream data) 计算SHA-1摘要值
sha1(String data) 计算sha1摘要值,使用UTF-8编码
sha1(String data, String charset) 计算SHA-1摘要值
sha1Hex(byte[] data) 计算SHA-1摘要值,并转为16进制字符串
sha1Hex(File file) 计算SHA-1摘要值,并转为16进制字符串
sha1Hex(InputStream data) 计算SHA-1摘要值,并转为16进制字符串
sha1Hex(String data) 计算SHA-1摘要值,并转为16进制字符串
sha1Hex(String data, String charset) 计算SHA-1摘要值,并转为16进制字符串
sha256(byte[] data) 计算SHA-256摘要值
sha256(File file) 计算SHA-256摘要值
sha256(InputStream data) 计算SHA-256摘要值
sha256(String data) 计算sha256摘要值,使用UTF-8编码
sha256(String data, String charset) 计算SHA-256摘要值
sha256Hex(byte[] data) 计算SHA-1摘要值,并转为16进制字符串
sha256Hex(File file) 计算SHA-256摘要值,并转为16进制字符串
sha256Hex(InputStream data) 计算SHA-256摘要值,并转为16进制字符串
sha256Hex(String data) 计算SHA-256摘要值,并转为16进制字符串
sha256Hex(String data, String charset) 计算SHA-256摘要值,并转为16进制字符串

DbUtil

数据库操作工具类

方法 介绍
close(Object... objsToClose) 连续关闭一系列的SQL相关对象
这些对象必须按照顺序关闭,否则会出错。
getDs() 获得默认数据源
getDs(String group) 获取指定分组的数据源
getJndiDs(String jndiName) 获得JNDI数据源
getJndiDsWithLog(String jndiName) 获得JNDI数据源
newSession() 新建数据库会话,使用默认数据源
newSession(DataSource ds) 新建数据库会话
newSqlConnRunner(Connection conn) 实例化一个新的SQL运行对象
newSqlConnRunner(DataSource ds) 实例化一个新的SQL运行对象
newSqlConnRunner(Dialect dialect) 实例化一个新的SQL运行对象
removeShowSqlParams(Setting setting) 移除配置文件中的Show SQL相关配置项
此方法用于移除用户配置在分组下的配置项目
setCaseInsensitiveGlobal(boolean caseInsensitive) 设置全局是否在结果中忽略大小写
如果忽略,则在Entity中调用getXXX时,字段值忽略大小写,默认忽略
setReturnGeneratedKeyGlobal(boolean returnGeneratedKey) 设置全局是否INSERT语句中默认返回主键(默认返回主键)
如果false,则在Insert操作后,返回影响行数 主要用于某些数据库不支持返回主键的情况
setShowSqlGlobal(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) 设置全局配置:是否通过debug日志显示SQL
setShowSqlGlobal(Setting setting) 从配置文件中读取SQL打印选项,读取后会去除相应属性
use() 实例化一个新的Db,使用默认数据源
use(DataSource ds) 实例化一个新的Db对象
use(DataSource ds, Dialect dialect) 实例化一个新的SQL运行对象

StatementUtil

Statement和PreparedStatement工具类

方法 介绍
fillParams(PreparedStatement ps, Iterable<?> params) 填充SQL的参数。
对于日期对象特殊处理:传入java.util.Date默认按照Timestamp处理
fillParams(PreparedStatement ps, Iterable<?> params, Map<Integer,Integer> nullTypeCache) 填充SQL的参数。
对于日期对象特殊处理:传入java.util.Date默认按照Timestamp处理
fillParams(PreparedStatement ps, Object... params) 填充SQL的参数。
getGeneratedKeyOfLong(Statement ps) 获得自增键的值
此方法对于Oracle无效(返回null)
getGeneratedKeys(Statement ps) 获得所有主键
getGeneratedKeys(Statement statement, RsHandler rsHandler) 获取主键,并使用RsHandler 处理后返回
getTypeOfNull(PreparedStatement ps, int paramIndex) 获取null字段对应位置的数据类型
有些数据库对于null字段必须指定类型,否则会插入报错,此方法用于获取其类型,如果获取失败,使用默认的Types.VARCHAR
prepareCall(Connection conn, String sql, Object... params) 创建CallableStatement
prepareStatement(Connection conn, SqlBuilder sqlBuilder) 创建PreparedStatement
prepareStatement(Connection conn, String sql, Collection params) 创建PreparedStatement
prepareStatement(Connection conn, String sql, Object... params) 创建PreparedStatement
prepareStatementForBatch(Connection conn, String sql, Iterable<Object[]> paramsBatch) 创建批量操作的PreparedStatement
prepareStatementForBatch(Connection conn, String sql, List fields, Entity... entities) 创建批量操作的PreparedStatement
prepareStatementForBatch(Connection conn, String sql, Object[]... paramsBatch) 创建批量操作的PreparedStatement
setParam(PreparedStatement ps, int paramIndex, Object param) 为PreparedStatement 设置单个参数

DriverUtil

驱动相关工具类,包括自动获取驱动类名

方法 介绍
identifyDriver(Connection conn) 识别JDBC驱动名
identifyDriver(DataSource ds) 识别JDBC驱动名
identifyDriver(String nameContainsProductInfo) 通过JDBC URL等信息识别JDBC驱动名

MetaUtil

数据库元数据信息工具类

方法 介绍
createLimitedEntity(DataSource ds, String tableName) 创建带有字段限制的Entity对象
此方法读取数据库中对应表的字段列表,加入到Entity中,当Entity被设置内容时,会忽略对应表字段外的所有KEY
getCataLog(Connection conn) 获取catalog,获取失败返回null
getColumnNames(DataSource ds, String tableName) 获得表的所有列名
getColumnNames(ResultSet rs) 获得结果集的所有列名
getSchema(Connection conn) 获取schema,获取失败返回null
getTableMeta(DataSource ds, String tableName) 获得表的元信息
注意如果需要获取注释,某些数据库如MySQL,需要在配置中添加:
getTables(DataSource ds) 获得所有表名
getTables(DataSource ds, String schema, String tableName, TableType... types) 获得所有表名
getTables(DataSource ds, String schema, TableType... types) 获得所有表名
getTables(DataSource ds, TableType... types) 获得所有表名

SqlUtil

SQL相关工具类,包括相关SQL语句拼接等

方法 介绍
blobToStr(Blob blob, Charset charset) Blob字段值转字符串
buildConditions(Entity entity) 通过实体对象构建条件对象
buildEqualsWhere(Entity entity, List paramValues) 构件相等条件的where语句
如果没有条件语句,泽返回空串,表示没有条件
buildLikeValue(String value, Condition.LikeType likeType, boolean withLikeKeyword) 创建LIKE语句中的值,创建的结果为:
clobToStr(Clob clob) Clob字段值转字符串
createBlob(Connection conn, byte[] data) 创建Blob对象
createBlob(Connection conn, InputStream dataStream, boolean closeAfterUse) 创建Blob对象
formatSql(String sql) 格式化SQL
rowIdToString(RowId rowId) 将RowId转为字符串
toSqlDate(Date date) 转换为Date
toSqlTimestamp(Date date) 转换为Timestamp

SensitiveUtil

敏感词工具类

方法 介绍
containsSensitive(Object obj) 是否包含敏感词
containsSensitive(String text) 是否包含敏感词
getFoundAllSensitive(Object bean) 查找敏感词,返回找到的所有敏感词
getFoundAllSensitive(Object bean, boolean isDensityMatch, boolean isGreedMatch) 查找敏感词,返回找到的所有敏感词
密集匹配原则:假如关键词有 ab,b,文本是abab,将匹配 [ab,b,ab]
贪婪匹配(最长匹配)原则:假如关键字a,ab,最长匹配将匹配[a, ab]
getFoundAllSensitive(String text) 查找敏感词,返回找到的所有敏感词
getFoundAllSensitive(String text, boolean isDensityMatch, boolean isGreedMatch) 查找敏感词,返回找到的所有敏感词
密集匹配原则:假如关键词有 ab,b,文本是abab,将匹配 [ab,b,ab]
贪婪匹配(最长匹配)原则:假如关键字a,ab,最长匹配将匹配[a, ab]
getFoundFirstSensitive(Object obj) 查找敏感词,返回找到的第一个敏感词
getFoundFirstSensitive(String text) 查找敏感词,返回找到的第一个敏感词
init(Collection sensitiveWords) 初始化敏感词树
init(Collection sensitiveWords, boolean isAsync) 初始化敏感词树
init(String sensitiveWords, boolean isAsync) 初始化敏感词树,使用逗号分隔每个单词
init(String sensitiveWords, char separator, boolean isAsync) 初始化敏感词树
isInited()
sensitiveFilter(String text, boolean isGreedMatch, SensitiveProcessor sensitiveProcessor) 处理过滤文本中的敏感词,默认替换成*
sensitiveFilter(T bean, boolean isGreedMatch, SensitiveProcessor sensitiveProcessor) 敏感词过滤
setCharFilter(Filter charFilter) 设置字符过滤规则,通过定义字符串过滤规则,过滤不需要的字符
当accept为false时,此字符不参与匹配

CglibUtil

Cglib工具类

方法 介绍
copy(Object source, Class targetClass) 拷贝Bean对象属性到目标类型
此方法通过指定目标类型自动创建之,然后拷贝属性
copy(Object source, Class targetClass, net.sf.cglib.core.Converter converter) 拷贝Bean对象属性
此方法通过指定目标类型自动创建之,然后拷贝属性
copy(Object source, Object target) 拷贝Bean对象属性
copy(Object source, Object target, net.sf.cglib.core.Converter converter) 拷贝Bean对象属性
copyList(Collection source, Supplier target) 拷贝List Bean对象属性
copyList(Collection source, Supplier target, BiConsumer<S,T> callback) 拷贝List Bean对象属性
copyList(Collection source, Supplier target, net.sf.cglib.core.Converter converter) 拷贝List Bean对象属性
copyList(Collection source, Supplier target, net.sf.cglib.core.Converter converter, BiConsumer<S,T> callback) 拷贝List Bean对象属性
fillBean(Map map, T bean) 将Map中的内容填充至Bean中
toBean(Map map, Class beanClass) 将Map转换为Bean
toMap(Object bean) 将Bean转换为Map

CompressUtil

压缩工具类

基于commons-compress的压缩解压封装

方法 介绍
createArchiver(Charset charset, String archiverName, File file) 创建归档器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
createArchiver(Charset charset, String archiverName, OutputStream out) 创建归档器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
createExtractor(Charset charset, File file) 创建归档解包器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
createExtractor(Charset charset, InputStream in) 创建归档解包器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
createExtractor(Charset charset, String archiverName, File file) 创建归档解包器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
createExtractor(Charset charset, String archiverName, InputStream in) 创建归档解包器,支持: ArchiveStreamFactory.AR ArchiveStreamFactory.CPIO ArchiveStreamFactory.JAR ArchiveStreamFactory.TAR ArchiveStreamFactory.ZIP ArchiveStreamFactory.SEVEN_Z
getIn(String compressorName, InputStream in) 获取压缩输入流,用于解压缩指定内容,支持的格式例如:
getOut(String compressorName, OutputStream out) 获取压缩输出流,用于压缩指定内容,支持的格式例如:

EmojiUtil

基于https://github.com/vdurmont/emoji-java的Emoji表情工具类

方法 介绍
containsEmoji(String str) 是否包含Emoji表情的Unicode符
extractEmojis(String str) 提取字符串中所有的Emoji Unicode
get(String alias) 通过别名获取Emoji
getByTag(String tag) 通过tag方式获取对应的所有Emoji表情
isEmoji(String str) 是否为Emoji表情的Unicode符
removeAllEmojis(String str) 去除字符串中所有的Emoji Unicode字符
toAlias(String str) 将字符串中的Unicode Emoji字符转换为别名表现形式(两个":"包围的格式)
toAlias(String str, com.vdurmont.emoji.EmojiParser.FitzpatrickAction fitzpatrickAction) 将字符串中的Unicode Emoji字符转换为别名表现形式(两个":"包围的格式),别名后会增加"
toHtml(String str) 将字符串中的Unicode Emoji字符转换为HTML表现形式
toHtmlHex(String str) 将字符串中的Unicode Emoji字符转换为HTML 16进制表现形式
toUnicode(String str) 将子串中的Emoji别名(两个":"包围的格式)和其HTML表示形式替换为为Unicode Emoji符号

ExpressionUtil

表达式引擎工具类

方法 介绍
eval(String expression, Map<String,Object> context) 执行表达式
getEngine() 获得全局单例的表达式引擎

InternalMailUtil

邮件内部工具类

方法 介绍
encodeText(String text, Charset charset) 编码中文字符
编码失败返回原字符串
parseAddress(String address, Charset charset) 将一个地址字符串解析为多个地址
地址间使用" "、","、";"分隔
parseAddressFromStrs(String[] addrStrs, Charset charset) 将多个字符串邮件地址转为InternetAddress列表
单个字符串地址可以是多个地址合并的字符串
parseFirstAddress(String address, Charset charset) 解析第一个地址

MailUtil

邮件工具类,基于javax.mail封装

方法 介绍
getSession(MailAccount mailAccount, boolean isSingleton) 根据配置文件,获取邮件客户端会话
send(Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送给多人
send(Collection tos, Collection ccs, Collection bccs, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送给多人
send(Collection tos, String subject, String content, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送给多人
send(Collection tos, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送给多人
send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) 发送邮件给多人
send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 发送邮件给多人
send(MailAccount mailAccount, Collection tos, String subject, String content, boolean isHtml, File... files) 发送邮件给多人
send(MailAccount mailAccount, Collection tos, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 发送邮件给多人
send(MailAccount mailAccount, String to, String subject, String content, boolean isHtml, File... files) 发送邮件给多人
send(MailAccount mailAccount, String to, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 发送邮件给多人
send(String to, String subject, String content, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
send(String to, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
send(String to, String cc, String bcc, String subject, String content, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
多个收件人、抄送人、密送人可以使用逗号“,”分隔,也可以通过分号“;”分隔
send(String to, String cc, String bcc, String subject, String content, Map<String,InputStream> imageMap, boolean isHtml, File... files) 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
多个收件人、抄送人、密送人可以使用逗号“,”分隔,也可以通过分号“;”分隔
sendHtml(Collection tos, String subject, String content, File... files) 使用配置文件中设置的账户发送HTML邮件,发送给多人
sendHtml(Collection tos, String subject, String content, Map<String,InputStream> imageMap, File... files) 使用配置文件中设置的账户发送HTML邮件,发送给多人
sendHtml(String to, String subject, String content, File... files) 使用配置文件中设置的账户发送HTML邮件,发送给单个或多个收件人
多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
sendHtml(String to, String subject, String content, Map<String,InputStream> imageMap, File... files) 使用配置文件中设置的账户发送HTML邮件,发送给单个或多个收件人
多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
sendText(Collection tos, String subject, String content, File... files) 使用配置文件中设置的账户发送文本邮件,发送给多人
sendText(String to, String subject, String content, File... files) 使用配置文件中设置的账户发送文本邮件,发送给单个或多个收件人
多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔

PinyinUtil

拼音工具类,封装了TinyPinyin、JPinyin、Pinyin4j,通过SPI自动识别。

方法 介绍
getEngine() 获得全局单例的拼音引擎
getFirstLetter(char c) 将输入字符串转为拼音首字母,其它字符原样返回
getFirstLetter(String str, String separator) 将输入字符串转为拼音首字母,其它字符原样返回
getPinyin(char c) 如果c为汉字,则返回大写拼音;如果c不是汉字,则返回String.valueOf(c)
getPinyin(String str) 将输入字符串转为拼音,每个字之间的拼音使用空格分隔
getPinyin(String str, String separator) 将输入字符串转为拼音,以字符为单位插入分隔符
isChinese(char c) 是否为中文字符

QrCodeUtil

基于Zxing的二维码工具类,支持: 二维码生成和识别,见BarcodeFormat.QR_CODE 条形码生成和识别,见BarcodeFormat.CODE_39等很多标准格式

方法 介绍
decode(File qrCodeFile) 解码二维码或条形码图片为文本
decode(Image image) 将二维码或条形码图片解码为文本
decode(Image image, boolean isTryHarder, boolean isPureBarcode) 将二维码或条形码图片解码为文本
此方法会尝试使用HybridBinarizer和GlobalHistogramBinarizer两种模式解析
需要注意部分二维码如果不带logo,使用PureBarcode模式会解析失败,此时须设置此选项为false。
decode(Image image, Map<com.google.zxing.DecodeHintType,Object> hints) 将二维码或条形码图片解码为文本
此方法会尝试使用HybridBinarizer和GlobalHistogramBinarizer两种模式解析
需要注意部分二维码如果不带logo,使用PureBarcode模式会解析失败,此时须设置此选项为false。
decode(InputStream qrCodeInputstream) 解码二维码或条形码图片为文本
encode(String content, com.google.zxing.BarcodeFormat format, int width, int height) 将文本内容编码为条形码或二维码
encode(String content, com.google.zxing.BarcodeFormat format, QrConfig config) 将文本内容编码为条形码或二维码
encode(String content, int width, int height) 将文本内容编码为二维码
encode(String content, QrConfig config) 将文本内容编码为二维码
generate(String content, com.google.zxing.BarcodeFormat format, int width, int height) 生成二维码或条形码图片
generate(String content, com.google.zxing.BarcodeFormat format, QrConfig config) 生成二维码或条形码图片
只有二维码时QrConfig中的图片才有效
generate(String content, int width, int height) 生成二维码图片
generate(String content, int width, int height, File targetFile) 生成二维码到文件,二维码图片格式取决于文件的扩展名
generate(String content, int width, int height, String imageType, OutputStream out) 生成二维码到输出流
generate(String content, QrConfig config) 生成二维码图片
generate(String content, QrConfig config, File targetFile) 生成二维码到文件,二维码图片格式取决于文件的扩展名
generate(String content, QrConfig config, String imageType, OutputStream out) 生成二维码到输出流
generateAsBase64(String content, QrConfig qrConfig, String imageType) 生成 Base64 编码格式的二维码,以 String 形式表示
generateAsBase64(String content, QrConfig qrConfig, String imageType, byte[] logo) 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示
generateAsBase64(String content, QrConfig qrConfig, String imageType, Image logo) 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示
generateAsBase64(String content, QrConfig qrConfig, String imageType, String logoBase64) 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示
generatePng(String content, int width, int height) 生成PNG格式的二维码图片,以byte[]形式表示
generatePng(String content, QrConfig config) 生成PNG格式的二维码图片,以byte[]形式表示
toImage(com.google.zxing.common.BitMatrix matrix, int foreColor, Integer backColor) BitMatrix转BufferedImage

ServletUtil

Servlet相关工具类封装

方法 介绍
addCookie(javax.servlet.http.HttpServletResponse response, javax.servlet.http.Cookie cookie) 设定返回给客户端的Cookie
addCookie(javax.servlet.http.HttpServletResponse response, String name, String value) 设定返回给客户端的Cookie
addCookie(javax.servlet.http.HttpServletResponse response, String name, String value, int maxAgeInSeconds) 设定返回给客户端的Cookie
Path: "/"
No Domain
addCookie(javax.servlet.http.HttpServletResponse response, String name, String value, int maxAgeInSeconds, String path, String domain) 设定返回给客户端的Cookie
fillBean(javax.servlet.ServletRequest request, T bean, boolean isIgnoreError) ServletRequest 参数转Bean
fillBean(javax.servlet.ServletRequest request, T bean, CopyOptions copyOptions) ServletRequest 参数转Bean
getBody(javax.servlet.ServletRequest request) 获取请求体
调用该方法后,getParam方法将失效
getBodyBytes(javax.servlet.ServletRequest request) 获取请求体byte[]
调用该方法后,getParam方法将失效
getClientIP(javax.servlet.http.HttpServletRequest request, String... otherHeaderNames) 获取客户端IP
getClientIPByHeader(javax.servlet.http.HttpServletRequest request, String... headerNames) 获取客户端IP
getCookie(javax.servlet.http.HttpServletRequest httpServletRequest, String name) 获得指定的Cookie
getHeader(javax.servlet.http.HttpServletRequest request, String name, Charset charset) 获得请求header中的信息
getHeader(javax.servlet.http.HttpServletRequest request, String name, String charsetName) 获得请求header中的信息
getHeaderIgnoreCase(javax.servlet.http.HttpServletRequest request, String nameIgnoreCase) 忽略大小写获得请求header中的信息
getHeaderMap(javax.servlet.http.HttpServletRequest request) 获取请求所有的头(header)信息
getMultipart(javax.servlet.ServletRequest request) 获得MultiPart表单内容,多用于获得上传的文件 在同一次请求中,此方法只能被执行一次!
getMultipart(javax.servlet.ServletRequest request, UploadSetting uploadSetting) 获得multipart/form-data 表单内容
包括文件和普通表单数据
在同一次请求中,此方法只能被执行一次!
getParamMap(javax.servlet.ServletRequest request) 获得所有请求参数
getParams(javax.servlet.ServletRequest request) 获得所有请求参数
getWriter(javax.servlet.http.HttpServletResponse response) 获得PrintWriter
isGetMethod(javax.servlet.http.HttpServletRequest request) 是否为GET请求
isIE(javax.servlet.http.HttpServletRequest request) 客户浏览器是否为IE
isMultipart(javax.servlet.http.HttpServletRequest request) 是否为Multipart类型表单,此类型表单用于文件上传
isPostMethod(javax.servlet.http.HttpServletRequest request) 是否为POST请求
readCookieMap(javax.servlet.http.HttpServletRequest httpServletRequest) 将cookie封装到Map里面
setHeader(javax.servlet.http.HttpServletResponse response, String name, Object value) 设置响应的Header
toBean(javax.servlet.ServletRequest request, Class beanClass, boolean isIgnoreError) ServletRequest 参数转Bean
write(javax.servlet.http.HttpServletResponse response, File file) 返回文件给客户端
write(javax.servlet.http.HttpServletResponse response, InputStream in) 返回数据给客户端
write(javax.servlet.http.HttpServletResponse response, InputStream in, int bufferSize) 返回数据给客户端
write(javax.servlet.http.HttpServletResponse response, InputStream in, String contentType) 返回数据给客户端
write(javax.servlet.http.HttpServletResponse response, InputStream in, String contentType, String fileName) 返回数据给客户端
write(javax.servlet.http.HttpServletResponse response, String text, String contentType) 返回数据给客户端

SpringUtil

Spring(Spring boot)工具封装,包括: Spring IOC容器中的bean对象获取 注册和注销Bean

方法 介绍
getActiveProfile() 获取当前的环境配置,当有多个环境配置时,只获取第一个
getActiveProfiles() 获取当前的环境配置,无配置返回null
getApplicationContext() 获取ApplicationContext
getApplicationName() 获取应用程序名称
getBean(Class clazz) 通过class获取Bean
getBean(String name) 通过name获取 Bean
getBean(String name, Class clazz) 通过name,以及Clazz返回指定的Bean
getBean(TypeReference reference) 通过类型参考返回带泛型参数的Bean
getBeanFactory() 获取ListableBeanFactory,可能为ConfigurableListableBeanFactory 或 ApplicationContextAware
getBeanNamesForType(Class<?> type) 获取指定类型对应的Bean名称,包括子类
getBeansOfType(Class type) 获取指定类型对应的所有Bean,包括子类
getConfigurableBeanFactory() 获取ConfigurableListableBeanFactory
getProperty(String key) 获取配置文件配置项的值
postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
publishEvent(org.springframework.context.ApplicationEvent event) 发布事件
registerBean(String beanName, T bean) 动态向Spring注册Bean
setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
unregisterBean(String beanName) 注销bean

GanymedUtil

Ganymed-SSH2封装,见:http://www.ganymed.ethz.ch/ssh2/

方法 介绍
close(ch.ethz.ssh2.Session session) 关闭会话
connect(String sshHost, int sshPort) 连接到服务器
exec(ch.ethz.ssh2.Session session, String cmd, Charset charset, OutputStream errStream) 执行Shell命令(使用EXEC方式)
execByShell(ch.ethz.ssh2.Session session, String cmd, Charset charset, OutputStream errStream) 执行Shell命令
openSession(String sshHost, int sshPort, String sshUser, String sshPass) 打开远程会话

JschUtil

Jsch工具类

Jsch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。

它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等。

方法 介绍
bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, int localPort) 绑定端口到本地。 一个会话可绑定多个端口
bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, String localHost, int localPort) 绑定端口到本地。 一个会话可绑定多个端口
bindRemotePort(com.jcraft.jsch.Session session, int bindPort, String host, int port) 绑定ssh服务端的serverPort端口, 到host主机的port端口上.
close(com.jcraft.jsch.Channel channel) 关闭会话通道
close(com.jcraft.jsch.Session session) 关闭SSH连接会话
close(String key) 关闭SSH连接会话
closeAll() 关闭所有SSH连接会话
createChannel(com.jcraft.jsch.Session session, ChannelType channelType) 创建Channel连接
createSession(com.jcraft.jsch.JSch jsch, String sshHost, int sshPort, String sshUser) 创建一个SSH会话,重用已经使用的会话
createSession(String sshHost, int sshPort, String sshUser, String sshPass) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)
createSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)
createSftp(com.jcraft.jsch.Session session) 创建Sftp
createSftp(String sshHost, int sshPort, String sshUser, String sshPass) 创建Sftp
exec(com.jcraft.jsch.Session session, String cmd, Charset charset) 执行Shell命令
exec(com.jcraft.jsch.Session session, String cmd, Charset charset, OutputStream errStream) 执行Shell命令(使用EXEC方式)
execByShell(com.jcraft.jsch.Session session, String cmd, Charset charset) 执行Shell命令
generateLocalPort() 生成一个本地端口,用于远程端口映射
getSession(String sshHost, int sshPort, String sshUser, String sshPass) 获得一个SSH会话,重用已经使用的会话
getSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 获得一个SSH会话,重用已经使用的会话
openAndBindPortToLocal(Connector sshConn, String remoteHost, int remotePort) 打开SSH会话,并绑定远程端口到本地的一个随机端口
openChannel(com.jcraft.jsch.Session session, ChannelType channelType) 打开Channel连接
openChannel(com.jcraft.jsch.Session session, ChannelType channelType, int timeout) 打开Channel连接
openSession(String sshHost, int sshPort, String sshUser, String sshPass) 打开一个新的SSH会话
openSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 打开一个新的SSH会话
openSession(String sshHost, int sshPort, String sshUser, String sshPass, int timeout) 打开一个新的SSH会话
openSftp(com.jcraft.jsch.Session session) 打开SFTP连接
openSftp(com.jcraft.jsch.Session session, int timeout) 打开SFTP连接
openShell(com.jcraft.jsch.Session session) 打开Shell连接
unBindPort(com.jcraft.jsch.Session session, int localPort) 解除端口映射

TemplateUtil

模板工具类

方法 介绍
createEngine() 根据用户引入的模板引擎jar,自动创建对应的模板引擎对象,使用默认配置
推荐创建的引擎单例使用,此方法每次调用会返回新的引擎
createEngine(TemplateConfig config) 根据用户引入的模板引擎jar,自动创建对应的模板引擎对象
推荐创建的引擎单例使用,此方法每次调用会返回新的引擎

TokenizerUtil

分词工具类

方法 介绍
createEngine() 根据用户引入的分词引擎jar,自动创建对应的分词引擎对象

ValidationUtil

java bean 校验工具类,此工具类基于validation-api(jakarta.validation-api)封装

方法 介绍
getValidator() 获取原生Validator 对象
validate(T bean, Class<?>... groups) 校验对象
validateProperty(T bean, String propertyName, Class<?>... groups) 校验bean的某一个属性
warpValidate(T bean, Class<?>... groups) 校验对象
warpValidateProperty(T bean, String propertyName, Class<?>... groups) 校验bean的某一个属性

HtmlUtil

HTML工具类

方法 介绍
cleanHtmlTag(String content) 清除所有HTML标签,但是不删除标签内的内容
escape(String text) 转义文本中的HTML字符为安全的字符,以下字符被转义: ' 替换为 ' (' doesn't work in HTML4) " 替换为 " & 替换为 & < 替换为 < > 替换为 >
filter(String htmlContent) 过滤HTML文本,防止XSS攻击
removeAllHtmlAttr(String content, String... tagNames) 去除指定标签的所有属性
removeHtmlAttr(String content, String... attrs) 去除HTML标签中的属性,如果多个标签有相同属性,都去除
removeHtmlTag(String content, boolean withTagContent, String... tagNames) 清除指定HTML标签
不区分大小写
removeHtmlTag(String content, String... tagNames) 清除指定HTML标签和被标签包围的内容
不区分大小写
unescape(String htmlStr) 还原被转义的HTML特殊字符
unwrapHtmlTag(String content, String... tagNames) 清除指定HTML标签,不包括内容
不区分大小写

HttpUtil

Http请求工具类

方法 介绍
buildBasicAuth(String username, String password, Charset charset) 构建简单的账号秘密验证信息,构建后类似于:
closeCookie() 关闭Cookie
createGet(String url) 创建Http GET请求对象
createGet(String url, boolean isFollowRedirects) 创建Http GET请求对象
createPost(String url) 创建Http POST请求对象
createRequest(Method method, String url) 创建Http请求对象
createServer(int port) 创建简易的Http服务器
decodeParamMap(String paramsStr, Charset charset) 将URL参数解析为Map(也可以解析Post中的键值对参数)
decodeParams(String paramsStr, Charset charset) 将URL参数解析为Map(也可以解析Post中的键值对参数)
decodeParams(String paramsStr, String charset) 将URL参数解析为Map(也可以解析Post中的键值对参数)
download(String url, OutputStream out, boolean isCloseOut) 下载远程文件
download(String url, OutputStream out, boolean isCloseOut, StreamProgress streamProgress) 下载远程文件
downloadBytes(String url) 下载远程文件数据,支持30x跳转
downloadFile(String url, File destFile) 下载远程文件
downloadFile(String url, File destFile, int timeout) 下载远程文件
downloadFile(String url, File destFile, int timeout, StreamProgress streamProgress) 下载远程文件
downloadFile(String url, File destFile, StreamProgress streamProgress) 下载远程文件
downloadFile(String url, String dest) 下载远程文件
downloadFileFromUrl(String url, File destFile) 下载远程文件
downloadFileFromUrl(String url, File destFile, int timeout) 下载远程文件
downloadFileFromUrl(String url, File destFile, int timeout, StreamProgress streamProgress) 下载远程文件
downloadFileFromUrl(String url, File destFile, StreamProgress streamProgress) 下载远程文件
downloadFileFromUrl(String url, String dest) 下载远程文件
downloadString(String url, Charset customCharset) 下载远程文本
downloadString(String url, Charset customCharset, StreamProgress streamPress) 下载远程文本
downloadString(String url, String customCharsetName) 下载远程文本
encodeParams(String urlWithParams, Charset charset) 对URL参数做编码,只编码键和值
提供的值可以是url附带参数,但是不能只是url
get(String urlString) 发送get请求
get(String urlString, Charset customCharset) 发送get请求
get(String urlString, int timeout) 发送get请求
get(String urlString, Map<String,Object> paramMap) 发送get请求
get(String urlString, Map<String,Object> paramMap, int timeout) 发送get请求
getCharset(HttpURLConnection conn) 从Http连接的头信息中获得字符集
从ContentType中获取
getCharset(String contentType) 从Http连接的头信息中获得字符集
从ContentType中获取
getContentTypeByRequestBody(String body) 从请求参数的body中判断请求的Content-Type类型,支持的类型有:
getMimeType(String filePath) 根据文件扩展名获得MimeType
getMimeType(String filePath, String defaultValue) 根据文件扩展名获得MimeType
getString(byte[] contentBytes, Charset charset, boolean isGetCharsetFromContent) 从流中读取内容
首先尝试使用charset编码读取内容(如果为空默认UTF-8),如果isGetCharsetFromContent为true,则通过正则在正文中获取编码信息,转换为指定编码;
getString(InputStream in, Charset charset, boolean isGetCharsetFromContent) 从流中读取内容
首先尝试使用charset编码读取内容(如果为空默认UTF-8),如果isGetCharsetFromContent为true,则通过正则在正文中获取编码信息,转换为指定编码;
isHttp(String url) 检测是否http
isHttps(String url) 检测是否https
normalizeParams(String paramPart, Charset charset) 标准化参数字符串,即URL中?后的部分
post(String urlString, Map<String,Object> paramMap) 发送post请求
post(String urlString, Map<String,Object> paramMap, int timeout) 发送post请求
post(String urlString, String body) 发送post请求
请求体body参数支持两种类型:
post(String urlString, String body, int timeout) 发送post请求
请求体body参数支持两种类型:
toParams(Map<String,?> paramMap) 将Map形式的Form表单数据转换为Url参数形式,会自动url编码键和值
toParams(Map<String,?> paramMap, Charset charset) 将Map形式的Form表单数据转换为Url参数形式
paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("")
会自动url编码键和值
toParams(Map<String,?> paramMap, Charset charset, boolean isEncode) 将Map形式的Form表单数据转换为Url参数形式
paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("")
会自动url编码键和值
toParams(Map<String,Object> paramMap, String charsetName) Deprecated.
请使用 toParams(Map, Charset)
urlWithForm(String url, Map<String,Object> form, Charset charset, boolean isEncodeParams) 将表单数据加到URL中(用于GET表单提交)
表单的键值对会被url编码,但是url中原参数不会被编码
urlWithForm(String url, String queryString, Charset charset, boolean isEncode) 将表单数据字符串加到URL中(用于GET表单提交)

UserAgentUtil

User-Agent工具类

方法 介绍
parse(String userAgentString) 解析User-Agent

SoapUtil

SOAP相关工具类

方法 介绍
createClient(String url) 创建SOAP客户端,默认使用soap1.1版本协议
createClient(String url, SoapProtocol protocol) 创建SOAP客户端
createClient(String url, SoapProtocol protocol, String namespaceURI) 创建SOAP客户端
toString(SOAPMessage message, boolean pretty) SOAPMessage 转为字符串
toString(SOAPMessage message, boolean pretty, Charset charset) SOAPMessage 转为字符串

InternalJSONUtil

内部JSON工具类,仅用于JSON内部使用

方法 介绍
stringToValue(String string) 尝试转换字符串为number, boolean, or null,无法转换返回String

JSONUtil

JSON工具类

方法 介绍
createArray() 创建 JSONArray
createArray(JSONConfig config) 创建 JSONArray
createObj() 创建JSONObject
createObj(JSONConfig config) 创建JSONObject
escape(String str) 转义显示不可见字符
formatJsonStr(String jsonStr) 格式化JSON字符串,此方法并不严格检查JSON的格式正确与否
getByPath(JSON json, String expression) 通过表达式获取JSON中嵌套的对象
.表达式,可以获取Bean对象中的属性(字段)值或者Map中key对应的值 []表达式,可以获取集合等对象中对应index的值
getByPath(JSON json, String expression, T defaultValue) 通过表达式获取JSON中嵌套的对象
.表达式,可以获取Bean对象中的属性(字段)值或者Map中key对应的值 []表达式,可以获取集合等对象中对应index的值
isJson(String str) 是否为JSON字符串,首尾都为大括号或中括号判定为JSON字符串
isJsonArray(String str) 是否为JSONArray字符串,首尾都为中括号判定为JSONArray字符串
isJsonObj(String str) 是否为JSONObject字符串,首尾都为大括号判定为JSONObject字符串
isNull(Object obj) 是否为null对象,null的情况包括:
parse(Object obj) 转换对象为JSON,如果用户不配置JSONConfig,则JSON的有序与否与传入对象有关。
支持的对象: String: 转换为相应的对象 Array、Iterable、Iterator:转换为JSONArray Bean对象:转为JSONObject
parse(Object obj, JSONConfig config) 转换对象为JSON,如果用户不配置JSONConfig,则JSON的有序与否与传入对象有关。
支持的对象: String: 转换为相应的对象 Array、Iterable、Iterator:转换为JSONArray Bean对象:转为JSONObject
parseArray(Object arrayOrCollection) JSON字符串转JSONArray
parseArray(Object arrayOrCollection, boolean ignoreNullValue) JSON字符串转JSONArray
parseArray(Object arrayOrCollection, JSONConfig config) JSON字符串转JSONArray
parseArray(String jsonStr) JSON字符串转JSONArray
parseFromXml(String xmlStr) XML字符串转为JSONObject
parseObj(Object obj) JSON字符串转JSONObject对象
此方法会忽略空值,但是对JSON字符串不影响
parseObj(Object obj, boolean ignoreNullValue) JSON字符串转JSONObject对象
parseObj(Object obj, boolean ignoreNullValue, boolean isOrder) JSON字符串转JSONObject对象
parseObj(Object obj, JSONConfig config) JSON字符串转JSONObject对象
此方法会忽略空值,但是对JSON字符串不影响
parseObj(String jsonStr) JSON字符串转JSONObject对象
putByPath(JSON json, String expression, Object value) 设置表达式指定位置(或filed对应)的值
若表达式指向一个JSONArray则设置其坐标对应位置的值,若指向JSONObject则put对应key的值
注意:如果为JSONArray,则设置值得下标不能大于已有JSONArray的长度
.表达式,可以获取Bean对象中的属性(字段)值或者Map中key对应的值 []表达式,可以获取集合等对象中对应index的值
putDeserializer(Type type, JSONDeserializer<?> deserializer) 加入自定义的反序列化器
putSerializer(Type type, JSONArraySerializer<?> serializer) 加入自定义的序列化器
putSerializer(Type type, JSONObjectSerializer<?> serializer) 加入自定义的序列化器
quote(String string) 对所有双引号做转义处理(使用双反斜杠做转义)
为了能在HTML中较好的显示,会将</转义为</
JSON字符串中不能包含控制字符和未经转义的引号和反斜杠
quote(String string, boolean isWrap) 对所有双引号做转义处理(使用双反斜杠做转义)
为了能在HTML中较好的显示,会将</转义为</
JSON字符串中不能包含控制字符和未经转义的引号和反斜杠
quote(String str, Writer writer) 对所有双引号做转义处理(使用双反斜杠做转义)
为了能在HTML中较好的显示,会将</转义为</
JSON字符串中不能包含控制字符和未经转义的引号和反斜杠
quote(String str, Writer writer, boolean isWrap) 对所有双引号做转义处理(使用双反斜杠做转义)
为了能在HTML中较好的显示,会将</转义为</
JSON字符串中不能包含控制字符和未经转义的引号和反斜杠
readJSON(File file, Charset charset) 读取JSON
readJSONArray(File file, Charset charset) 读取JSONArray
readJSONObject(File file, Charset charset) 读取JSONObject
toBean(JSONObject json, Class beanClass) 转为实体类对象,转换异常将被抛出
toBean(JSON json, Type beanType, boolean ignoreError) 转为实体类对象
toBean(JSON json, TypeReference typeReference, boolean ignoreError) 转为实体类对象
toBean(String jsonString, Class beanClass) JSON字符串转为实体类对象,转换异常将被抛出
toBean(String jsonString, Type beanType, boolean ignoreError) JSON字符串转为实体类对象,转换异常将被抛出
toBean(String jsonString, TypeReference typeReference, boolean ignoreError) JSON字符串转为实体类对象,转换异常将被抛出
toJsonPrettyStr(JSON json) 转为JSON字符串
toJsonPrettyStr(Object obj) 转换为格式化后的JSON字符串
toJsonStr(JSON json) 转为JSON字符串
toJsonStr(JSON json, int indentFactor) 转为JSON字符串
toJsonStr(JSON json, Writer writer) 转为JSON字符串,并写出到write
toJsonStr(Object obj) 转换为JSON字符串
toJsonStr(Object obj, JSONConfig jsonConfig) 转换为JSON字符串
toJsonStr(Object obj, Writer writer) 转换为JSON字符串并写出到writer
toList(JSONArray jsonArray, Class elementType) 将JSONArray转换为Bean的List,默认为ArrayList
toList(String jsonArray, Class elementType) 将JSONArray字符串转换为Bean的List,默认为ArrayList
toXmlStr(JSON json) 转换为XML字符串
wrap(Object object, JSONConfig jsonConfig) 在需要的时候包装对象
包装包括: null =》 JSONNull.NULL array or collection =》 JSONArray map =》 JSONObject standard property (Double, String, et al) =》 原对象 来自于java包 =》 字符串 其它 =》 尝试包装为JSONObject,否则返回null
xmlToJson(String xml) XML转JSONObject
转换过程中一些信息可能会丢失,JSON中无法区分节点和属性,相同的节点将被处理为JSONArray。

JWTUtil

JSON Web Token (JWT)工具类

方法 介绍
createToken(Map<String,Object> payload, byte[] key) 创建HS256(HmacSHA256) JWT Token
createToken(Map<String,Object> payload, JWTSigner signer) 创建JWT Token
createToken(Map<String,Object> headers, Map<String,Object> payload, byte[] key) 创建HS256(HmacSHA256) JWT Token
createToken(Map<String,Object> headers, Map<String,Object> payload, JWTSigner signer) 创建JWT Token
parseToken(String token) 解析JWT Token
verify(String token, byte[] key) 验证JWT Token有效性
verify(String token, JWTSigner signer) 验证JWT Token有效性

AlgorithmUtil

算法工具类,算法和JWT算法ID对应表

方法 介绍
getAlgorithm(String idOrAlgorithm) 获取算法,用户传入算法ID返回算法名,传入算法名返回本身
getId(String idOrAlgorithm) 获取算法ID,用户传入算法名返回ID,传入算法ID返回本身

JWTSignerUtil

JWT签名器工具类

方法 介绍
createSigner(String algorithmId, byte[] key) 创建签名器
createSigner(String algorithmId, Key key) 创建签名器
createSigner(String algorithmId, KeyPair keyPair) 创建签名器
es256(Key key) ES256(SHA256withECDSA)签名器
es384(Key key) ES384(SHA383withECDSA)签名器
es512(Key key) ES512(SHA512withECDSA)签名器
hs256(byte[] key) HS256(HmacSHA256)签名器
hs384(byte[] key) HS384(HmacSHA384)签名器
hs512(byte[] key) HS512(HmacSHA512)签名器
none() 无签名
rs256(Key key) RS256(SHA256withRSA)签名器
rs384(Key key) RS384(SHA384withRSA)签名器
rs512(Key key) RS512(SHA512withRSA)签名器

ExcelDateUtil

ExcelExtractor工具封装

方法 介绍
isDateFormat(org.apache.poi.ss.usermodel.Cell cell)
isDateFormat(org.apache.poi.ss.usermodel.Cell cell, org.apache.poi.ss.formula.ConditionalFormattingEvaluator cfEvaluator) 判断是否日期格式
isDateFormat(org.apache.poi.ss.usermodel.ExcelNumberFormat numFmt) 判断是否日期格式
isDateFormat(int formatIndex, String formatString) 判断日期格式

ExcelExtractorUtil

Excel文件工具类

方法 介绍
getExtractor(org.apache.poi.ss.usermodel.Workbook wb) 获取 ExcelExtractor 对象
readAsText(org.apache.poi.ss.usermodel.Workbook wb, boolean withSheetName) 读取为文本格式
使用ExcelExtractor 提取Excel内容

ExcelFileUtil

Excel图片工具类

方法 介绍
isXls(InputStream in) 是否为XLS格式的Excel文件(HSSF)
XLS文件主要用于Excel 97~2003创建
此方法会自动调用InputStream.reset()方法
isXlsx(File file) 是否为XLSX格式的Excel文件(XSSF)
XLSX文件主要用于Excel 2007+创建
isXlsx(InputStream in) 是否为XLSX格式的Excel文件(XSSF)
XLSX文件主要用于Excel 2007+创建
此方法会自动调用InputStream.reset()方法

ExcelPicUtil

Excel读取器

读取Excel工作簿

方法 介绍
getPicMap(org.apache.poi.ss.usermodel.Workbook workbook, int sheetIndex) 获取工作簿指定sheet中图片列表

ExcelUtil

Excel 写入器

此工具用于通过POI将数据写出到Excel,此对象可完成以下两个功能

方法 介绍
colNameToIndex(String colName) 根据表元的列名转换为列号
getBigWriter() 获得BigExcelWriter,默认写出到第一个sheet
不传入写出的Excel文件路径,只能调用ExcelWriter#flush(OutputStream)方法写出到流
若写出到文件,还需调用ExcelWriter.setDestFile(File)方法自定义写出的文件,然后调用ExcelWriter.flush()方法写出到文件
getBigWriter(File destFile) 获得BigExcelWriter,默认写出到第一个sheet,名字为sheet1
getBigWriter(File destFile, String sheetName) 获得BigExcelWriter
getBigWriter(int rowAccessWindowSize) 获得BigExcelWriter,默认写出到第一个sheet
不传入写出的Excel文件路径,只能调用ExcelWriter#flush(OutputStream)方法写出到流
若写出到文件,还需调用ExcelWriter.setDestFile(File)方法自定义写出的文件,然后调用ExcelWriter.flush()方法写出到文件
getBigWriter(String destFilePath) 获得BigExcelWriter,默认写出到第一个sheet
getBigWriter(String destFilePath, String sheetName) 获得BigExcelWriter
getReader(File bookFile) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
默认调用第一个sheet
getReader(File bookFile, int sheetIndex) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
getReader(File bookFile, String sheetName) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
getReader(InputStream bookStream) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
默认调用第一个sheet,读取结束自动关闭流
getReader(InputStream bookStream, int sheetIndex) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
读取结束自动关闭流
getReader(InputStream bookStream, String sheetName) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
读取结束自动关闭流
getReader(String bookFilePath) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
默认调用第一个sheet
getReader(String bookFilePath, int sheetIndex) 获取Excel读取器,通过调用ExcelReader的read或readXXX方法读取Excel内容
getWriter() 获得ExcelWriter,默认写出到第一个sheet
不传入写出的Excel文件路径,只能调用ExcelWriter#flush(OutputStream)方法写出到流
若写出到文件,还需调用ExcelWriter.setDestFile(File)方法自定义写出的文件,然后调用ExcelWriter.flush()方法写出到文件
getWriter(boolean isXlsx) 获得ExcelWriter,默认写出到第一个sheet
不传入写出的Excel文件路径,只能调用ExcelWriter#flush(OutputStream)方法写出到流
若写出到文件,还需调用ExcelWriter.setDestFile(File)方法自定义写出的文件,然后调用ExcelWriter.flush()方法写出到文件
getWriter(File destFile) 获得ExcelWriter,默认写出到第一个sheet,名字为sheet1
getWriter(File destFile, String sheetName) 获得ExcelWriter
getWriter(String destFilePath) 获得ExcelWriter,默认写出到第一个sheet
getWriter(String destFilePath, String sheetName) 获得ExcelWriter
getWriterWithSheet(String sheetName) 获得ExcelWriter,默认写出到第一个sheet
indexToColName(int index) 将Sheet列号变为列名
readBySax(File file, int rid, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
readBySax(File file, String idOrRidOrSheetName, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
readBySax(InputStream in, int rid, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
readBySax(InputStream in, String idOrRidOrSheetName, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
readBySax(String path, int rid, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
readBySax(String path, String idOrRid, RowHandler rowHandler) 通过Sax方式读取Excel,同时支持03和07格式
toLocation(String locationRef) 将Excel中地址标识符(例如A11,B5)等转换为行列表示
例如:A11 -》 x:0,y:10,B5-》x:1,y:4

RowUtil

样式集合,此样式集合汇集了整个工作簿的样式,用于减少样式的创建和冗余

方法 介绍
getOrCreateRow(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex) 获取已有行或创建新行
insertRow(org.apache.poi.ss.usermodel.Sheet sheet, int startRow, int insertNumber) 插入行
readRow(org.apache.poi.ss.usermodel.Row row, CellEditor cellEditor) 读取一行
readRow(org.apache.poi.ss.usermodel.Row row, int startCellNumInclude, int endCellNumInclude, CellEditor cellEditor) 读取一行
removeRow(org.apache.poi.ss.usermodel.Row row) 从工作表中删除指定的行,此方法修复sheet.shiftRows删除行时会拆分合并的单元格的问题
writeRow(org.apache.poi.ss.usermodel.Row row, Iterable<?> rowData) 写一行数据,无样式,非标题
writeRow(org.apache.poi.ss.usermodel.Row row, Iterable<?> rowData, StyleSet styleSet, boolean isHeader) 写一行数据

WorkbookUtil

方法 介绍
createBook(boolean isXlsx) 根据文件类型创建新的工作簿,文件路径
createBook(File excelFile) 创建或加载工作簿
createBook(File excelFile, String password) 创建或加载工作簿,只读模式
createBook(InputStream in) 创建或加载工作簿
createBook(InputStream in, String password) 创建或加载工作簿
createBook(String excelFilePath) 创建或加载工作簿
createBookForWriter(File excelFile) 创建工作簿,用于Excel写出
createSXSSFBook() 创建SXSSFWorkbook,用于大批量数据写出
createSXSSFBook(File excelFile) 创建或加载SXSSFWorkbook工作簿
createSXSSFBook(File excelFile, String password) 创建或加载SXSSFWorkbook工作簿,只读模式
createSXSSFBook(InputStream in) 创建或加载SXSSFWorkbook工作簿
createSXSSFBook(InputStream in, String password) 创建或加载SXSSFWorkbook工作簿
createSXSSFBook(int rowAccessWindowSize) 创建SXSSFWorkbook,用于大批量数据写出
createSXSSFBook(String excelFilePath) 创建或加载SXSSFWorkbook工作簿
getOrCreateSheet(org.apache.poi.ss.usermodel.Workbook book, int sheetIndex) 获取或者创建sheet表
自定义需要读取或写出的Sheet,如果给定的sheet不存在,创建之(命名为默认)
在读取中,此方法用于切换读取的sheet,在写出时,此方法用于新建或者切换sheet
getOrCreateSheet(org.apache.poi.ss.usermodel.Workbook book, String sheetName) 获取或者创建sheet表
如果sheet表在Workbook中已经存在,则获取之,否则创建之
isEmpty(org.apache.poi.ss.usermodel.Sheet sheet) sheet是否为空
writeBook(org.apache.poi.ss.usermodel.Workbook book, OutputStream out) 将Excel Workbook刷出到输出流,不关闭流

CellUtil

Excel表格中单元格工具类

方法 介绍
getCell(org.apache.poi.ss.usermodel.Row row, int cellIndex) 获取单元格,如果单元格不存在,返回NullCell
getCellValue(org.apache.poi.ss.usermodel.Cell cell) 获取单元格值
getCellValue(org.apache.poi.ss.usermodel.Cell cell, boolean isTrimCellValue) 获取单元格值
getCellValue(org.apache.poi.ss.usermodel.Cell cell, CellEditor cellEditor) 获取单元格值
getCellValue(org.apache.poi.ss.usermodel.Cell cell, org.apache.poi.ss.usermodel.CellType cellType, boolean isTrimCellValue) 获取单元格值
getCellValue(org.apache.poi.ss.usermodel.Cell cell, org.apache.poi.ss.usermodel.CellType cellType, CellEditor cellEditor) 获取单元格值
如果单元格值为数字格式,则判断其格式中是否有小数部分,无则返回Long类型,否则返回Double类型
getMergedRegionCell(org.apache.poi.ss.usermodel.Cell cell) 获取合并单元格
传入的x,y坐标(列行数)可以是合并单元格范围内的任意一个单元格
getMergedRegionCell(org.apache.poi.ss.usermodel.Sheet sheet, int x, int y) 获取合并单元格
传入的x,y坐标(列行数)可以是合并单元格范围内的任意一个单元格
getMergedRegionValue(org.apache.poi.ss.usermodel.Sheet sheet, int x, int y) 获取合并单元格的值
传入的x,y坐标(列行数)可以是合并单元格范围内的任意一个单元格
getMergedRegionValue(org.apache.poi.ss.usermodel.Sheet sheet, String locationRef) 获取合并单元格的值
传入的x,y坐标(列行数)可以是合并单元格范围内的任意一个单元格
getOrCreateCell(org.apache.poi.ss.usermodel.Row row, int cellIndex) 获取已有单元格或创建新单元格
isMergedRegion(org.apache.poi.ss.usermodel.Cell cell) 判断指定的单元格是否是合并单元格
isMergedRegion(org.apache.poi.ss.usermodel.Sheet sheet, int x, int y) 判断指定的单元格是否是合并单元格
isMergedRegion(org.apache.poi.ss.usermodel.Sheet sheet, String locationRef) 判断指定的单元格是否是合并单元格
mergingCells(org.apache.poi.ss.usermodel.Sheet sheet, int firstRow, int lastRow, int firstColumn, int lastColumn) 合并单元格,可以根据设置的值来合并行和列
mergingCells(org.apache.poi.ss.usermodel.Sheet sheet, int firstRow, int lastRow, int firstColumn, int lastColumn, org.apache.poi.ss.usermodel.CellStyle cellStyle) 合并单元格,可以根据设置的值来合并行和列
setCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value) 设置单元格值
根据传入的styleSet自动匹配样式
当为头部样式时默认赋值头部样式,但是头部中如果有数字、日期等类型,将按照数字、日期样式设置
setCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value, org.apache.poi.ss.usermodel.CellStyle style) 设置单元格值
根据传入的styleSet自动匹配样式
当为头部样式时默认赋值头部样式,但是头部中如果有数字、日期等类型,将按照数字、日期样式设置
setCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value, StyleSet styleSet, boolean isHeader) 设置单元格值
根据传入的styleSet自动匹配样式
当为头部样式时默认赋值头部样式,但是头部中如果有数字、日期等类型,将按照数字、日期样式设置
setComment(org.apache.poi.ss.usermodel.Cell cell, String commentText, String commentAuthor, org.apache.poi.ss.usermodel.ClientAnchor anchor) 为特定单元格添加批注

ExcelSaxUtil

Sax方式读取Excel相关工具类

方法 介绍
countNullCell(String preRef, String ref) 计算两个单元格之间的单元格数目(同一行)
createSaxReader(boolean isXlsx, RowHandler rowHandler) 创建 ExcelSaxReader
formatCellContent(String value, int numFmtIndex, String numFmtString) 格式化数字或日期值
getDataValue(CellDataType cellDataType, String value, org.apache.poi.xssf.model.SharedStringsTable sharedStringsTable, String numFmtString) 根据数据类型获取数据
getDateValue(double value) 获取日期
getDateValue(String value) 获取日期
getNumberOrDateValue(org.apache.poi.hssf.record.CellValueRecordInterface cell, double value, org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener formatListener) 在Excel03 sax读取中获取日期或数字类型的结果值
isDateFormat(org.apache.poi.hssf.record.CellValueRecordInterface cell, org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener formatListener) 判断数字Record中是否为日期格式
isDateFormat(int formatIndex, String formatString) 判断日期格式
readFrom(InputStream xmlDocStream, ContentHandler handler) 从Excel的XML文档中读取内容,并使用ContentHandler处理

StyleUtil

Excel样式工具类

方法 介绍
cloneCellStyle(org.apache.poi.ss.usermodel.Cell cell, org.apache.poi.ss.usermodel.CellStyle cellStyle) 克隆新的CellStyle
cloneCellStyle(org.apache.poi.ss.usermodel.Workbook workbook, org.apache.poi.ss.usermodel.CellStyle cellStyle) 克隆新的CellStyle
createCellStyle(org.apache.poi.ss.usermodel.Workbook workbook) 创建单元格样式
createDefaultCellStyle(org.apache.poi.ss.usermodel.Workbook workbook) 创建默认普通单元格样式
createFont(org.apache.poi.ss.usermodel.Workbook workbook, short color, short fontSize, String fontName) 创建字体
createHeadCellStyle(org.apache.poi.ss.usermodel.Workbook workbook) 创建默认头部样式
getFormat(org.apache.poi.ss.usermodel.Workbook workbook, String format) 创建数据格式并获取格式
isNullOrDefaultStyle(org.apache.poi.ss.usermodel.Workbook workbook, org.apache.poi.ss.usermodel.CellStyle style) 给定样式是否为null(无样式)或默认样式,默认样式为workbook.getCellStyleAt(0)
setAlign(org.apache.poi.ss.usermodel.CellStyle cellStyle, org.apache.poi.ss.usermodel.HorizontalAlignment halign, org.apache.poi.ss.usermodel.VerticalAlignment valign) 设置cell文本对齐样式
setBorder(org.apache.poi.ss.usermodel.CellStyle cellStyle, org.apache.poi.ss.usermodel.BorderStyle borderSize, org.apache.poi.ss.usermodel.IndexedColors colorIndex) 设置cell的四个边框粗细和颜色
setColor(org.apache.poi.ss.usermodel.CellStyle cellStyle, org.apache.poi.ss.usermodel.IndexedColors color, org.apache.poi.ss.usermodel.FillPatternType fillPattern) 给cell设置颜色
setColor(org.apache.poi.ss.usermodel.CellStyle cellStyle, short color, org.apache.poi.ss.usermodel.FillPatternType fillPattern) 给cell设置颜色
setFontStyle(org.apache.poi.ss.usermodel.Font font, short color, short fontSize, String fontName) 设置字体样式

DocUtil

Word Document工具

方法 介绍
create(File file) 创建XWPFDocument,如果文件已存在则读取之,否则创建新的

TableUtil

Word中表格相关工具

方法 介绍
createTable(org.apache.poi.xwpf.usermodel.XWPFDocument doc) 创建空表,只有一行
createTable(org.apache.poi.xwpf.usermodel.XWPFDocument doc, Iterable<?> data) 创建表格并填充数据,默认表格
getOrCreateCell(org.apache.poi.xwpf.usermodel.XWPFTableRow row, int index) 获取或创建新单元格
存在则直接返回,不存在创建新的单元格
getOrCreateRow(org.apache.poi.xwpf.usermodel.XWPFTable table, int index) 获取或创建新行
存在则直接返回,不存在创建新的行
writeRow(org.apache.poi.xwpf.usermodel.XWPFTableRow row, Iterable<?> rowData) 写行数据
writeRow(org.apache.poi.xwpf.usermodel.XWPFTableRow row, Map rowMap, boolean isWriteKeyAsHead) 写行数据
writeRow(org.apache.poi.xwpf.usermodel.XWPFTableRow row, Object rowBean, boolean isWriteKeyAsHead) 写一行数据
writeTable(org.apache.poi.xwpf.usermodel.XWPFTable table, Iterable<?> data) 为table填充数据

WordUtil

Word工具类

方法 介绍
getWriter() 创建Word 07格式的生成器
getWriter(File destFile) 创建Word 07格式的生成器

ScriptUtil

脚本工具类

方法 介绍
compile(ScriptEngine engine, String script) 编译Javascript脚本
compile(String script) 编译Javascript脚本
createGroovyEngine() 创建Groovy引擎
需要引入org.codehaus.groovy:groovy-all
createJsEngine() 创建新的JavaScript引擎
createLuaEngine() 创建Lua引擎
需要引入org.luaj:luaj-jse
createPythonEngine() 创建Python引擎
需要引入org.python:jython
createScript(String nameOrExtOrMime) 创建 ScriptEngine 实例
eval(String script) 执行有返回值的Javascript脚本
eval(String script, Bindings bindings) 执行有返回值的脚本
eval(String script, ScriptContext context) 执行有返回值的脚本
evalInvocable(String script) 执行Javascript脚本,返回Invocable,此方法分为两种情况: 执行的脚本返回值是可执行的脚本方法 脚本为函数库,则ScriptEngine本身为可执行方法
getGroovyEngine() 获得单例的Groovy引擎
需要引入org.codehaus.groovy:groovy-all
getJavaScriptEngine() 获得非单例的 Javascript引擎 JavaScriptEngine
getJsEngine() 获得单例的JavaScript引擎
getLuaEngine() 获得单例的Lua引擎
需要引入org.luaj:luaj-jse
getPythonEngine() 获得单例的Python引擎
需要引入org.python:jython
getScript(String nameOrExtOrMime) 获得单例的ScriptEngine 实例
invoke(String script, String func, Object... args) 执行JS脚本中的指定方法

SettingUtil

Setting工具类

提供静态方法获取配置文件

方法 介绍
get(String name) 获取当前环境下的配置文件
name可以为不包括扩展名的文件名(默认.setting为结尾),也可以是文件名全称
getFirstFound(String... names) 获取给定路径找到的第一个配置文件
* name可以为不包括扩展名的文件名(默认.setting为结尾),也可以是文件名全称

PropsUtil

Props工具类

提供静态方法获取配置文件

方法 介绍
get(String name) 获取当前环境下的配置文件
name可以为不包括扩展名的文件名(默认.properties),也可以是文件名全称
getFirstFound(String... names) 获取给定路径找到的第一个配置文件
* name可以为不包括扩展名的文件名(默认.properties为结尾),也可以是文件名全称
getSystemProps() 获取系统参数,例如用户在执行java命令时定义的 -Duse=hutool

YamlUtil

基于Snakeyaml的的YAML读写工具

方法 介绍
dump(Object object, Writer writer) 将Bean对象或者Map写出到Writer
dump(Object object, Writer writer, org.yaml.snakeyaml.DumperOptions dumperOptions) 将Bean对象或者Map写出到Writer
load(InputStream in, Class type) 从流中加载YAML
load(Reader reader) 加载YAML,加载完毕后关闭Reader
load(Reader reader, Class type) 加载YAML,加载完毕后关闭Reader
load(Reader reader, Class type, boolean isCloseReader) 加载YAML
loadByPath(String path) 从classpath或绝对路径加载YAML文件
loadByPath(String path, Class type) 从classpath或绝对路径加载YAML文件

SocketUtil

Socket相关工具类

方法 介绍
connect(InetSocketAddress address, int connectionTimeout) 创建Socket并连接到指定地址的服务器
connect(String hostname, int port) 创建Socket并连接到指定地址的服务器
connect(String hostname, int port, int connectionTimeout) 创建Socket并连接到指定地址的服务器
getRemoteAddress(AsynchronousSocketChannel channel) 获取远程端的地址信息,包括host和端口
null表示channel为null或者远程主机未连接
isConnected(AsynchronousSocketChannel channel) 远程主机是否处于连接状态
通过判断远程地址获取成功与否判断

NioUtil

NIO工具类

方法 介绍
registerChannel(Selector selector, SelectableChannel channel, Operation ops) 注册通道的指定操作到指定Selector上

SystemUtil

Java的System类封装工具类。

参考:http://blog.csdn.net/zhongweijian/article/details/7619383

方法 介绍
append(StringBuilder builder, String caption, Object value) 输出到StringBuilder。
dumpSystemInfo() 将系统信息输出到System.out中。
dumpSystemInfo(PrintWriter out) 将系统信息输出到指定PrintWriter中。
get(String key) 获得System属性
get(String name, boolean quiet) 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 null
get(String name, String defaultValue) 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 defaultValue
getBoolean(String key, boolean defaultValue) 获得boolean类型值
getClassLoadingMXBean() 返回Java虚拟机类加载系统相关属性
getCompilationMXBean() 返回Java虚拟机编译系统相关属性
如果没有编译系统,则返回null
getCurrentPID() 获取当前进程 PID
getFreeMemory() 获取JVM中内存剩余大小
getGarbageCollectorMXBeans() 获取Java虚拟机中的GarbageCollectorMXBean列表
getHostInfo() 取得Host的信息。
getInt(String key, int defaultValue) 获得int类型值
getJavaInfo() 取得Java Implementation的信息。
getJavaRuntimeInfo() 取得当前运行的JRE的信息。
getJavaSpecInfo() 取得Java Specification的信息。
getJvmInfo() 取得Java Virtual Machine Implementation的信息。
getJvmSpecInfo() 取得Java Virtual Machine Specification的信息。
getLong(String key, long defaultValue) 获得long类型值
getMaxMemory() 获取JVM可用的内存总大小
getMemoryManagerMXBeans() 获取Java虚拟机中的MemoryManagerMXBean列表
The Java virtual machine can have one or more memory managers.
getMemoryMXBean() 返回Java虚拟机内存系统相关属性
getMemoryPoolMXBeans() 获取Java虚拟机中的MemoryPoolMXBean列表
The Java virtual machine can have one or more memory pools.
getOperatingSystemMXBean() 返回Java虚拟机运行下的操作系统相关信息属性
getOsInfo() 取得OS的信息。
getRuntimeInfo() 取得Runtime的信息。
getRuntimeMXBean() 返回Java虚拟机运行时系统相关属性
getThreadMXBean() 返回Java虚拟机线程系统相关属性
getTotalMemory() 获取JVM中内存总大小
getTotalThreadCount() 获取总线程数
getUserInfo() 取得User的信息。
props()

OshiUtil

Oshi库封装的工具类,通过此工具类,可获取系统、硬件相关信息

方法 介绍
getCpuInfo() 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息
默认间隔1秒
getCpuInfo(long waitingTime) 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息
getCurrentProcess() 获取当前进程信息OSProcess
getDiskStores() 获取磁盘相关信息,可能有多个磁盘(包括可移动磁盘等)
getHardware() 获取硬件相关信息,包括内存、硬盘、网络设备、显示器、USB、声卡等
getMemory() 获取内存相关信息,比如总内存、可用内存等
getNetworkIFs() 获取网络相关信息,可能多块网卡
getOs() 获取操作系统相关信息,包括系统版本、文件系统、进程等
getProcessor() 获取CPU(处理器)相关信息,比如CPU负载等
getSensors() 获取传感器相关信息,例如CPU温度、风扇转速等,传感器可能有多个
getSystem() 获取BIOS中计算机相关信息,比如序列号、固件版本等