目录

1 集合工具类

1.1 java.util.Collections

1.1.1 基本操作

1.1.2 转换线程安全集合

1.2 org.springframework.util.CollectionUtils

1.3 org.apache.commons.collections.CollectionUtils

1.4 org.apache.commons.lang.ArrayUtils

1.5 org.apache.commons.lang3.ArrayUtils

1.6 com.google.common.collect.Lists

2 文件流工具类

2.1 org.apache.commons.io.IOUtils

2.2 org.apache.commons.io.FileUtils

2.3 org.apache.commons.io.FilenameUtils

3 字符串工具类

3.1 org.apache.commons.lang.StringUtils

3.2 org.apache.commons.lang3.StringUtils

3.3 org.springframework.util.StringUtils

3.4 org.apache.commons.lang3.StringEscapeUtils(废弃)

4 对象属性及反射工具类

4.1 java.util.Objects

4.2 org.apache.http.util.EntityUtils

4.3 org.apache.commons.beanutils.PropertyUtils

4.4 org.apache.commons.beanutils.BeanUtils

4.5 org.springframework.beans.BeanUtils

4.6 org.springframework.util.ClassUtils

4.7 org.springframework.util.ReflectionUtils

5 网络序列化工具类

5.1 org.apache.http.client.utils.URLEncodedUtils

5.2 org.apache.http.HttpStatus

5.3 org.springframework.util.SerializationUtils

6 加解密工具类

6.1 org.apache.commons.codec.digest.DigestUtils

6.2 org.springframework.util.Base64Utils

6.3 java.nio.charset.StandardCharsets

7 其他工具类

7.1 org.apache.commons.lang3.BooleanUtils

7.2 org.springframework.util.Assert

7.2.1 断言参数是否为空

7.2.2 断言集合是否为空

7.2.3 断言条件是否为空

7.3 org.slf4j.MDC


1 集合工具类

1.1 java.util.Collections

使用的基本list示意

List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);

1.1.1 基本操作

Collections.sort(list);//升序
Collections.reverse(list);//降序
Collections.max(list);//获取最大值
Collections.min(list);//获取最小值
Collections.emptyList();//空集合
Collections.binarySearch(list, 3);//二分查找
Collections.unmodifiableList(list);//转换成不可修改集合

1.1.2 转换线程安全集合

我们都知道,java中的很多集合,比如:ArrayList、LinkedList、HashMap、HashSet等,都是线程不安全的。
换句话说,这些集合在多线程的环境中,添加数据会出现异常。
这时,可以用Collections的synchronizedxxx方法,将这些线程不安全的集合,直接转换成线程安全集合。例如

 List<Integer> list = new ArrayList<>();list.add(2);list.add(1);list.add(3);List<Integer> integers = Collections.synchronizedList(list);//将ArrayList转换成线程安全集合System.out.println(integers);

它的底层会创建SynchronizedRandomAccessList或者SynchronizedList类,这两个类的很多方法都会用synchronized加锁

1.2 org.springframework.util.CollectionUtils

常用方法:

1.3 org.apache.commons.collections.CollectionUtils

常用方法:

常用方法:

CollectionUtils.isEmpty();//集合判空
CollectionUtils.union(list, list2);//获取并集
CollectionUtils.intersection(list, list2);//获取交集
CollectionUtils.disjunction(list, list2);//获取交集的补集
CollectionUtils.subtract(list, list2);//获取差集
CollectionUtils.select:根据条件筛选集合元素
CollectionUtils.transform:根据指定方法处理集合元素,类似List的map()
CollectionUtils.filter:过滤元素,雷瑟List的filter()
CollectionUtils.find:基本和select一样
CollectionUtils.collect:和transform 差不多一样,但是返回新数组
CollectionUtils.forAllDo:调用每个元素的指定方法
CollectionUtils.isEqualCollection:判断两个集合是否一致

1.4 org.apache.commons.lang.ArrayUtils

contains:是否包含某字符串
addAll:添加整个数组
clone:克隆一个数组
isEmpty:是否空数组
add:向数组添加元素
subarray:截取数组
indexOf:查找某个元素的下标
isEquals:比较数组是否相等
toObject:基础类型数据数组转换为对应的Object数组

1.5 org.apache.commons.lang3.ArrayUtils

contains:是否包含某个字符串
addAll:添加整个数组
clone:克隆一个数组
isEmpty:是否空数组
add:向数组添加元素
subarray:截取数组
indexOf:查找某个元素的下标
isEquals:比较数组是否相等
toObject:基础类型数据数组转换为对应的Object数组

1.6 com.google.common.collect.Lists

Lists.newArrayList();//创建空集合
Lists.newArrayList(1, 2, 3);//快速初始化集合
Lists.cartesianProduct(list1,list2);//笛卡尔积
Lists.partition(list, 2);//分页,将一个大集合分成若干个小集合
Lists.transform(list, x -> x.toUpperCase());//把某个集合转换成另外一个接口,可以使用Lists的transform方法
Lists.reverse(list);//颠倒顺序

2 文件流工具类

2.1 org.apache.commons.io.IOUtils

closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块
toString:读取文件,转换IO流、 Uri、 byte[]为String,例:IOUtils.toString(new FileInputStream("/temp/a.txt"), StandardCharsets.UTF_8);
copy:文件拷贝,IO流数据复制,从输入流写到输出流中,最大支持2GB,例:IOUtils.copy(new FileInputStream("/temp/a.txt"), new FileOutputStream("/temp/b.txt"));
toByteArray:读取文件内容到字节数组,从输入流、URI获取byte[],IOUtils.toByteArray(new FileInputStream("/temp/a.txt"));
write:写入文件,把字节. 字符等写入输出流,例:IOUtils.write(str, new FileOutputStream("/temp/b.tx"), StandardCharsets.UTF_8);
toInputStream:把字符转换为输入流
readLines:从输入流中读取多行数据,返回List<String>
copyLarge:同copy,支持2GB以上数据的复制
lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败

其他常用方法:

2.2 org.apache.commons.io.FileUtils

deleteDirectory:删除文件夹
readFileToString:以字符形式读取文件内容
deleteQueitly:删除文件或文件夹且不会抛出异常
copyFile:复制文件
writeStringToFile:把字符写到目标文件,如果文件不存在,则创建
forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级
write:把字符写到指定文件中
listFiles:列举某个目录下的文件(根据过滤器)
copyDirectory:复制文件夹
forceDelete:强制删除文件

2.3 org.apache.commons.io.FilenameUtils

getExtension:返回文件后缀名
getBaseName:返回文件名,不包含后缀名
getName:返回文件全名
concat:按命令行风格组合文件路径(详见方法注释)
removeExtension:删除后缀名
normalize:使路径正常化
wildcardMatch:匹配通配符
seperatorToUnix:路径分隔符改成unix系统格式的,即/
getFullPath:获取文件路径,不包括文件名
isExtension:检查文件后缀名是不是传入参数(List<String>)中的一个

3 字符串工具类

3.1 org.apache.commons.lang.StringUtils

isBlank:字符串是否为空 (trim后判断)
isEmpty:字符串是否为空 (不trim并判断)
equals:字符串是否相等
join:合并数组为单一字符串,可传分隔符
split:分割字符串
EMPTY:返回空字符串
trimToNull:trim后为空字符串则转换为null
replace:替换字符串

3.2 org.apache.commons.lang3.StringUtils

isBlank:字符串是否为空 (trim后判断)
isEmpty:字符串是否为空 (不trim并判断)
equals:字符串是否相等
join:合并数组为单一字符串,可传分隔符,例:StringUtils.join(list, ",")
split:分割字符串,StringUtils.split(str1,",")和str1.split(",")区别:使用StringUtils的split方法会返回null,而使用String的split方法会报指针异常
EMPTY:返回空字符串
replace:替换字符串
capitalize:首字符大写
StringUtils.isNumeric(str1);//判断是否纯数字

3.3 org.springframework.util.StringUtils

hasText:检查字符串中是否包含文本
hasLength:检测字符串是否长度大于0
isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)
commaDelimitedStringToArray:逗号分隔的String转换为数组
collectionToDelimitedString:把集合转为CSV格式字符串
replace 替换字符串
delimitedListToStringArray:相当于split
uncapitalize:首字母小写
collectionToDelimitedCommaString:把集合转为CSV格式字符串
tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词

3.4 org.apache.commons.lang3.StringEscapeUtils(废弃)

unescapeHtml4:转义html
escapeHtml4:反转义html
escapeXml:转义xml
unescapeXml:反转义xml
escapeJava:转义unicode编码
escapeEcmaScript:转义EcmaScript字符
unescapeJava:反转义unicode编码
escapeJson:转义json字符
escapeXml10:转义Xml10

这个现在已经废弃了,建议使用commons-text包里面的方法。

4 对象属性及反射工具类

4.1 java.util.Objects

Objects.isNull(integer);//对象为空
Objects.nonNull(integer);//对象不为空
Objects.requireNonNull(integer1, "参数不能为空");//对象为空抛异常
Objects.equals(integer1, integer2);//判断两个对象是否相等,Objects给我们提供了equals方法
Objects.hashCode(str);//获取对象的hashCode

4.2 org.apache.http.util.EntityUtils

toString:把Entity转换为字符串
consume:确保Entity中的内容全部被消费。可以看到源码里又一次消费了Entity的内容,假如用户没有消费,那调用Entity时候将会把它消费掉
toByteArray:把Entity转换为字节流
consumeQuietly:和consume一样,但不抛异常
getContentCharset:获取内容的编码

4.3 org.apache.commons.beanutils.PropertyUtils

getProperty:获取对象属性值
setProperty:设置对象属性值
getPropertyDiscriptor:获取属性描述器
isReadable:检查属性是否可访问
copyProperties:复制属性值,从一个对象到另一个对象
getPropertyDiscriptors:获取所有属性描述器
isWriteable:检查属性是否可写
getPropertyType:获取对象属性类型

4.4 org.apache.commons.beanutils.BeanUtils

copyPeoperties:复制属性值,从一个对象到另一个对象
getProperty:获取对象属性值
setProperty:设置对象属性值
populate:根据Map给属性复制
copyPeoperty:复制单个值,从一个对象到另一个对象
cloneBean:克隆bean实例

4.5 org.springframework.beans.BeanUtils

BeanUtils.copyProperties(user1, user2);//拷贝对象的属性
BeanUtils.instantiateClass(User.class);//实例化某个类
BeanUtils.findDeclaredMethod(User.class, "getId");//获取指定类的指定方法
BeanUtils.findPropertyForMethod(declaredMethod);//获取指定方法的参数

使用例子:

Method declaredMethod = BeanUtils.findDeclaredMethod(User.class, "getId");
PropertyDescriptor propertyForMethod = BeanUtils.findPropertyForMethod(declaredMethod);
System.out.println(propertyForMethod.getName())

4.6 org.springframework.util.ClassUtils

ClassUtils.getAllInterfaces(new User());//获取对象的所有接口
ClassUtils.getPackageName(User.class);//获取某个类的包名
ClassUtils.isInnerClass(User.class);//判断某个类是否内部类
ClassUtils.isCglibProxy(new User());//判断对象是否代理对象

4.7 org.springframework.util.ReflectionUtils

Method method = ReflectionUtils.findMethod(User.class, "getId");//获取方法
Field field = ReflectionUtils.findField(User.class, "id");//获取字段
ReflectionUtils.invokeMethod(method, springContextsUtil.getBean(beanName), param);//执行方法
ReflectionUtils.isPublicStaticFinal(field);//判断字段是否常量
ReflectionUtils.isEqualsMethod(method);//判断某个方法是否equals方法

5 网络序列化工具类

5.1 org.apache.http.client.utils.URLEncodedUtils

format:格式化参数,返回一个HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串
parse:把String或者URI等转换为List<NameValuePair>

5.2 org.apache.http.HttpStatus

把常用的http返回码给我们定义好了,直接拿来用就可以了,真的不用再重复定义了(org.springframework.http.HttpStatus也是同样的)

5.3 org.springframework.util.SerializationUtils

有时候,我们需要把数据进行序列化反序列化处理。传统的做法是某个类实现Serializable接口,然后重新它的writeObjectreadObject方法。但如果使用org.springframework.util包下的SerializationUtils工具类,能更轻松实现序列化和反序列化功能。

Map<String, String> map = Maps.newHashMap();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
byte[] serialize = SerializationUtils.serialize(map);
Object deserialize = SerializationUtils.deserialize(serialize);
System.out.println(deserialize);

6 加解密工具类

6.1 org.apache.commons.codec.digest.DigestUtils

md5Hex:MD5加密,返回32位字符串,例:DigestUtils.md5Hex("技术");
sha1Hex:SHA-1加密
sha256Hex:SHA-256加密,例:DigestUtils.sha256Hex("技术");
sha512Hex:SHA-512加密
md5:MD5加密,返回16位字符串

6.2 org.springframework.util.Base64Utils

有时候,为了安全考虑,需要将参数只用base64编码。这时就能直接使用org.springframework.util包下的Base64Utils工具类。

它里面包含:encodedecode方法,用于对数据进行加密和解密。例如

String str = "abc";
String encode = new String(Base64Utils.encode(str.getBytes()));
System.out.println("加密后:" + encode);
try {String decode = new String(Base64Utils.decode(encode.getBytes()), "utf8");System.out.println("解密后:" + decode);
} catch (UnsupportedEncodingException e) {e.printStackTrace();
}

6.3 java.nio.charset.StandardCharsets

我们在做字符转换的时候,经常需要指定字符编码,比如:UTF-8、ISO-8859-1等等。这时就可以直接使用java.nio.charset包下的StandardCharsets类中静态变量。

例如:

String str = "abc";
String encode = new String(Base64Utils.encode(str.getBytes()));
System.out.println("加密后:" + encode);
String decode = new String(Base64Utils.decode(encode.getBytes()), StandardCharsets.UTF_8);
System.out.println("解密后:" + decode);

7 其他工具类

7.1 org.apache.commons.lang3.BooleanUtils

BooleanUtils.isTrue(aBoolean);//判断true
BooleanUtils.isFalse(aBoolean);//判断false
BooleanUtils.isNotTrue(aBoolean);//判断不为true
BooleanUtils.isNotFalse(aBoolean);//判断不为false
BooleanUtils.toInteger(aBoolean);//转换成数字,将true转换成数字1,false转换成数字0
BooleanUtils.toBoolean(aBoolean);//Boolean转换成布尔值,将包装类Boolean对象,转换成原始的boolean对象,可以使用toBoolean方法

7.2 org.springframework.util.Assert

7.2.1 断言参数是否为空

String str = null;
Assert.isNull(str, "str必须为空");
Assert.isNull(str, () -> "str必须为空");
Assert.notNull(str, "str不能为空");

如果不满足条件就会抛出IllegalArgumentException异常

7.2.2 断言集合是否为空

断言集合是否空,如果不满足条件,则直接抛异常,如果不满足条件就会抛出IllegalArgumentException异常

List<String> list = null;
Map<String, String> map = null;
Assert.notEmpty(list, "list不能为空");
Assert.notEmpty(list, () -> "list不能为空");
Assert.notEmpty(map, "map不能为空");

7.2.3 断言条件是否为空

断言是否满足某个条件,如果不满足条件,则直接抛异常。

List<String> list = null;
Assert.isTrue(CollectionUtils.isNotEmpty(list), "list不能为空");
Assert.isTrue(CollectionUtils.isNotEmpty(list), () -> "list不能为空");

7.3 org.slf4j.MDC

MDCorg.slf4j包下的一个类,它的全称是Mapped Diagnostic Context,我们可以认为它是一个线程安全的存放诊断日志的容器。

MDC的底层是用了ThreadLocal来保存数据的。我们可以用它传递参数。

例如现在有这样一种场景:我们使用RestTemplate调用远程接口时,有时需要在header中传递信息,比如:traceId,source等,便于在查询日志时能够串联一次完整的请求链路,快速定位问题。这种业务场景就能通过ClientHttpRequestInterceptor接口实现,具体做法如下

第一步,定义一个LogFilter拦截所有接口请求,在MDC中设置traceId:

public class LogFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {MdcUtil.add(UUID.randomUUID().toString());System.out.println("记录请求日志");chain.doFilter(request, response);System.out.println("记录响应日志");}@Overridepublic void destroy() {}
}

第二步,实现ClientHttpRequestInterceptor接口,MDC中获取当前请求的traceId,然后设置到header中

public class RestTemplateInterceptor implements ClientHttpRequestInterceptor {@Overridepublic ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {request.getHeaders().set("traceId", MdcUtil.get());return execution.execute(request, body);}
}

第三步,定义配置类,配置上面定义的RestTemplateInterceptor类:

@Configuration
public class RestTemplateConfiguration {@Beanpublic RestTemplate restTemplate() {RestTemplate restTemplate = new RestTemplate();restTemplate.setInterceptors(Collections.singletonList(restTemplateInterceptor()));return restTemplate;}@Beanpublic RestTemplateInterceptor restTemplateInterceptor() {return new RestTemplateInterceptor();}
}

其中MdcUtil其实是利用MDC工具在ThreadLocal中存储和获取traceId

public class MdcUtil {private static final String TRACE_ID = "TRACE_ID";public static String get() {return MDC.get(TRACE_ID);}public static void add(String value) {MDC.put(TRACE_ID, value);}
}

能使用MDC保存traceId等参数的根本原因是,用户请求到应用服务器,Tomcat会从线程池中分配一个线程去处理该请求。那么该请求的整个过程中,保存到MDC的ThreadLocal中的参数,也是该线程独享的,所以不会有线程安全问题

另外,工具类,根据阿里开发手册,包名如果要使用util不能带s,工具类命名为XxxUtils

JAVA常用的工具类相关推荐

  1. Java常用加密算法工具类

    import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import ...

  2. java常用文件工具类

    java常用工具类(一) 主要是Java操作文件及及IO流的一些常用库,是Apache对java的IO包的封装,这里面文件类工具有两个非常核心的类FilenameUtils跟FileUtils,IO流 ...

  3. java常用时间工具类

    /*** LocalDateTime工具类** @author Code13* @date 2019-11-10 21:10*/ public final class LocalDateTimeUti ...

  4. 28个Java常用的工具类

    源码下载:http://pan.baidu.com/s/1pJLSczD Base64.java Base64DecodingException.java CConst.java CharTools. ...

  5. Java 常用的工具类—判断Excel版本读取Excel/CSV文件

    以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...

  6. java中常用的工具类

    1. 常用零散工具类 1.1[DateUtil.java]日期处理的工具类 /*** 时间日期处理工具* String -> Date* Date -> String* 以及生成含有日期的 ...

  7. java项目常用的工具类

    前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...

  8. java并发编程中常用的工具类 Executor

    /***************************************************  * TODO: description .  * @author: gao_chun  * ...

  9. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  10. java web 项目 常用 小工具类 ~~~~

    java web 项目 常用 小工具类 ~~~~ 一 .DateUtil  日期工具类 package com.devframe.common.util;import java.text.Simple ...

最新文章

  1. [iPhone-Sqlite3]sqlite3_prepare_v2() 不返回 SQLITE_OK,调试
  2. iscsi介绍及iscsi target配置
  3. 部署好网站,同局域网中电脑无法访问的问题的解决方案
  4. C语言灵魂篇|指针作为函数返回值
  5. matlab 数字调制函数,matlab用于数字调制,几个函数的使用问题
  6. wget命令详解_嵌入式学习之 Wget 命令详解
  7. Shell 中 exit 和 return 的区别
  8. LeetCode: First Missing Positive 解题报告
  9. 多窗口文件管理软件 Q_Dir
  10. WiRadius认证计费管理系统
  11. python里窗口大小的单位_python界面上的图片缩放,根据窗口大小
  12. 2014 史丰收速算
  13. 解决错误Establishing SSL connection without server‘s identity verification is not recommended.
  14. linux系统支持网银吗,Linux系统能使用网银吗?Linux网银使用方法介绍
  15. 机械臂抓取学习笔记四
  16. 简述思科、华为交换机型号字母代表的意思
  17. Unity学习笔记1 简易2D横版RPG游戏制作(一)
  18. 用计算机模拟掷骰子实验,实验一古典概型及其模拟(6页)-原创力文档
  19. Faded (Conor Maynard Cover)
  20. io域名代表英属印度洋领地

热门文章

  1. WPS 2019使用技巧及WPS2019政府版最全合集
  2. ios懒人笔记应用源码
  3. MyBatis——13用mybatis实现银行转账
  4. Spss典型相关分析的常见问题
  5. msdn系统镜像下载
  6. php出库单编号怎么编,求大神帮忙写VBA,出库单自动保存到明细,自动编号
  7. phoenix 根据条件更新_教您一步步升级Phoenix BIOS
  8. 模拟手机通信录管理系统
  9. 白话空间统计三十:地统计学(2)前提假设
  10. Python编程 介绍(入门)