JAVA常用的工具类
目录
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
接口,然后重新它的writeObject
和readObject
方法。但如果使用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
工具类。
它里面包含:encode
和decode
方法,用于对数据进行加密和解密。例如
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
MDC
是org.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常用的工具类相关推荐
- Java常用加密算法工具类
import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import ...
- java常用文件工具类
java常用工具类(一) 主要是Java操作文件及及IO流的一些常用库,是Apache对java的IO包的封装,这里面文件类工具有两个非常核心的类FilenameUtils跟FileUtils,IO流 ...
- java常用时间工具类
/*** LocalDateTime工具类** @author Code13* @date 2019-11-10 21:10*/ public final class LocalDateTimeUti ...
- 28个Java常用的工具类
源码下载:http://pan.baidu.com/s/1pJLSczD Base64.java Base64DecodingException.java CConst.java CharTools. ...
- Java 常用的工具类—判断Excel版本读取Excel/CSV文件
以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...
- java中常用的工具类
1. 常用零散工具类 1.1[DateUtil.java]日期处理的工具类 /*** 时间日期处理工具* String -> Date* Date -> String* 以及生成含有日期的 ...
- java项目常用的工具类
前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...
- java并发编程中常用的工具类 Executor
/*************************************************** * TODO: description . * @author: gao_chun * ...
- java常用工具类和Hutool常用的工具类整理
java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...
- java web 项目 常用 小工具类 ~~~~
java web 项目 常用 小工具类 ~~~~ 一 .DateUtil 日期工具类 package com.devframe.common.util;import java.text.Simple ...
最新文章
- [iPhone-Sqlite3]sqlite3_prepare_v2() 不返回 SQLITE_OK,调试
- iscsi介绍及iscsi target配置
- 部署好网站,同局域网中电脑无法访问的问题的解决方案
- C语言灵魂篇|指针作为函数返回值
- matlab 数字调制函数,matlab用于数字调制,几个函数的使用问题
- wget命令详解_嵌入式学习之 Wget 命令详解
- Shell 中 exit 和 return 的区别
- LeetCode: First Missing Positive 解题报告
- 多窗口文件管理软件 Q_Dir
- WiRadius认证计费管理系统
- python里窗口大小的单位_python界面上的图片缩放,根据窗口大小
- 2014 史丰收速算
- 解决错误Establishing SSL connection without server‘s identity verification is not recommended.
- linux系统支持网银吗,Linux系统能使用网银吗?Linux网银使用方法介绍
- 机械臂抓取学习笔记四
- 简述思科、华为交换机型号字母代表的意思
- Unity学习笔记1 简易2D横版RPG游戏制作(一)
- 用计算机模拟掷骰子实验,实验一古典概型及其模拟(6页)-原创力文档
- Faded (Conor Maynard Cover)
- io域名代表英属印度洋领地