JAVA常用的工具类

JAVA常用的工具类目录 1org apache commons io IOUtils2org apache commons io FileUtils3or apache commons lang StringUtils4 apache http util EntityUtils5 apache commons lang3 StringUtils6 apache

目录

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 
   
     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 转换线程安全集合

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

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

1.2 org.springframework.util.CollectionUtils

常用方法:

JAVA常用的工具类

1.3 org.apache.commons.collections.CollectionUtils

常用方法:

JAVA常用的工具类

常用方法: 

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 
   
     copyLarge:同copy,支持2GB以上数据的复制 lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败 
   

其他常用方法:

JAVA常用的工具类

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 
   
     )中的一个 
   

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 

JAVA常用的工具类

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方法

JAVA常用的工具类

5 网络序列化工具类

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

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

5.2 org.apache.http.HttpStatus

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

JAVA常用的工具类

5.3 org.springframework.util.SerializationUtils

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

Map 
   
     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位字符串

JAVA常用的工具类

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方法

JAVA常用的工具类

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 
   
     list = null; Map 
    
      map = null; Assert.notEmpty(list, "list不能为空"); Assert.notEmpty(list, () -> "list不能为空"); Assert.notEmpty(map, "map不能为空"); 
     
   

7.2.3 断言条件是否为空

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

List 
   
     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 { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public 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("记录响应日志"); } @Override public void destroy() { } }

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

public class RestTemplateInterceptor implements ClientHttpRequestInterceptor { @Override public 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 { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.setInterceptors(Collections.singletonList(restTemplateInterceptor())); return restTemplate; } @Bean public 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221869.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:06
下一篇 2026年3月17日 下午5:06


相关推荐

  • Git出现SSL certificate problem: unable to get local issuer certificate

    Git出现SSL certificate problem: unable to get local issuer certificate使用 Git 进行 Clone 或者 Pull 程序的时候会提示 nbsp SSL nbsp certificate nbsp problem nbsp unable nbsp to nbsp get nbsp local nbsp issuer nbsp certificate nbsp 这个是由于 Git 默认开启了 SSL 验证 关闭即可 解决方式 gitconfigglo sslVerifyfal 执行以上 git 命令 关闭 ssl 验证

    2026年3月18日
    2
  • idea设置jdk环境

    idea设置jdk环境有时候 我们导入一个新的项目 发现在导入项目时候 明明已经设置了 jdk 版本 但是运行时 还会提示版本的问题 这时候 主要从以下三个地方看 是否设置正确 1 Projectstruc 中的相关设置 1 1Projectstru gt ProjectSetti gt Project 中的设置 1 2Projectstru gt Pro

    2026年3月19日
    3
  • 数据结构与算法经典书籍——大话数据结构(带配套源码)

    数据结构与算法经典书籍——大话数据结构(带配套源码)书本下载链接:链接:https://pan.baidu.com/s/1jgVnbBZoLgA8pshpxbapOQ密码:577l配套程序链接:https://pan.baidu.com/s/1HYka42KngWT2el7T0HO7LA密码:i6hw虽说数据结构以美国人MarkAllenWeiss写的《数据结构与算法分析——C语言实现》最好,但是我发现他的书让人很不容易理解,可能我们…

    2022年6月3日
    57
  • JavaScript中的split函数中的正则表达式

    JavaScript中的split函数中的正则表达式JavaScript 中的 split 函数中的正则表达式最近在看 JavaScript 高级程序设计 的时候 看到 split 函数传入正则表达式的时候不是很理解 查了一些资料基本和书上说的一样 看不太懂 打算去 segmentfault 问一下大神的时候 编辑问题的时候突然想明白了 所以在这里做一个记录 代码如下 varcolorText red blue green yellow varcolo

    2026年3月16日
    2
  • android之activity的生命周期详解

    刚在看mars老师的视频,看到activity的生命周期,感觉挺有收获,就总结了一下.为了更清楚的看清楚工作的具体过程,举例如下:,建立两个activity,一个main,一个another,在main里面放置button加监听器跳转向another,在每个复写的activity的状态方法里都加一个log输出,比如onCrea

    2022年3月9日
    43
  • 海贼王革命家—龙—实力到底如何?[通俗易懂]

    海贼王革命家—龙—实力到底如何?[通俗易懂]龙——整个海贼王世界中最神秘的人物,令世界政府最担心的存在,是所有迷最为期待的实力展现,他的身上好像有着无数的秘密等着尾田为我们揭晓。路飞的父亲——未来的海贼王、卡普的儿子——海军英雄、革民军首领—

    2022年8月5日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号