apachecommons-常用工具类

56次阅读

共计 6016 个字符,预计需要花费 16 分钟才能阅读完成。

前言

见过大多数公司都有封装自己的工具类,很多已经有人实现了方法又重新实现一遍,不仅代码质量得不到保证,而且性能,并发都会有问题;反正我一般不用公司封装的工具类,像 apache.commons ,springutil 中都已经有很多现成的工具可以使用了,没必要重复造轮子;本文章主要是说一下有哪些比较常用的工具可以使用,不一定全面, 大神勿踩。

引用包说明

本文引用的所有包如下

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.3</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.6.RELEASE</version>
</dependency>

常用工具类介绍

下面每个块的工具都是按我的使用频率排序的。

字符串处理

import org.apache.commons.lang3.StringUtils;

boolean StringUtils.isBlank(str);            // " " 为 true
boolean StringUtils.isEmpty(str);            // " " 为 false
boolean StringUtils.isNotBlank(str);
boolean StringUtils.isNotEmpty(str);

String[] StringUtils.split(str,char/String,max);// 切割字符串,使用给定字符 ;  max 主要是用来处理空内容的

String StringUtils.capitalize(str);            // 首字母大写
String StringUtils.uncapitalize(str);        // 首字母小写

boolean StringUtils.isNumeric(str);
boolean StringUtils.isNumericSpace(str);    // ""为 true"12 3" 为 true

String StringUtils.join(array/Iterable,chat/String);    // 类似于 js 的 join , 使用给定字符拼接数组或集合中的元素

String StringUtils.leftPad(str,size,padChar);        // 给左边拼接固定长度的字符
String StringUtils.rightPad(str,size,padChar);        // 右边拼接固定长度的字符 

格式化信息

import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

DateFormatUtils.format(Date/Calendar/long,pattern);
DateFormatUtils.ISO_DATE_FORMAT.format(Date/Calendar/long);        // yyyy-MM-dd
DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(Date/Calendar/long);// HH:mm:ss

DurationFormatUtils.formatDuration(long,format);        // 格式化毫秒值为指定格式

// 用于实体类 param,po,dto,vo
@Override
public String toString() {return ToStringBuilder.reflectionToString(this,ToStringStyle.SHORT_PREFIX_STYLE);
}

集合和数组的处理

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.collections.CollectionUtils;

boolean ArrayUtils.isEmpty(Array);
boolean ArrayUtils.isNotEmpty(Array);

boolean CollectionUtils.isEmpty(Collection);
boolean CollectionUtils.isNotEmpty(Collection);
Collection CollectionUtils.union(a,b);            // 并集
Collection CollectionUtils.intersection(a,b);    // 交集
Collection CollectionUtils.disjunction(a,b);    // 补集
Collection CollectionUtils.subtract(a,b);        // 差集 

日期处理

import org.apache.commons.lang3.time.DateUtils;

Date DateUtils.parseDate(str,parsePatterns);
boolean DateUtils.isSameDay(Date,Date);            // 判断两个日期是否是同一天

Date DateUtils.truncate(Date,field);            // 日期截取,只取指定日期字段的值
Date DateUtils.round(Date,field);                // 日期四舍五入,和 truncate 的区别是 如果用 YEAR 当前时间是 2019-08-18 truncate 的值还是 2019,但 round 会得到 2020 

Date DateUtils.addDays(Date,amount);            // 增加一天, 这个不会修改原来的日期值
还有 addYears,addMonths,addWeeks,addHours,addMinutes,addSeconds,addMilliseconds

Date DateUtils.setDays(Date,amount);            // 设置为本月的第几天
还有 setYears,setMonths,setHours,setMinutes,setSeconds,setMilliseconds

/*
计算已过去的天数,从哪儿开始算呢,根据第 2 个参数 fragment 来确定,如现在是 2014-10-23 13:27:00,那么
DateUtils.getFragmentInDays(new Date(), Calendar.MONTH) 返回 23,表示从当月起已经过去 23 天了,DateUtils.getFragmentInDays(new Date(), Calendar.YEAR) 返回 296,表示从当年起已经过去 296 天了,DateUtils.getFragmentInHours(new Date(), Calendar.DATE) 返回 13,表示从今天起已经过去 13 个小时了
*/
long DateUtils.getFragmentInDays(Date,fragment);    // 计算已经过去的天数 

数字的一些处理

import org.apache.commons.lang3.math.NumberUtils;

int NumberUtils.toInt(String);
还有 toLong,toDouble,toFloat,toShort 等

boolean NumberUtils.isDigits(String);        // 判断是否全由数字组成 "" 为 false
boolean NumberUtils.isNumber(String);        // 支持 0x 类的表达形式 

增强反射处理

import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.springframework.cglib.core.ReflectUtils;
import org.springframework.util.ReflectionUtils;

Class<?> ClassUtils.getClass(className);
boolean ClassUtils.isInnerClass(Class<?>);            // 是否是内部类
boolean ClassUtils.isPrimitiveOrWrapper(Class<?>);    // 判断是否是原始类型或原始类型的包装类

List<Method> MethodUtils.getMethodsListWithAnnotation(Class<?>, Class<? extends Annotation>);
Method ReflectionUtils.findMethod(Class<?> clazz,methodName, Class<?>...);
PropertyDescriptor[] ReflectUtils.getBeanGetters(Class type);

Object MethodUtils.invokeMethod(object,methodName,args[],values[]);    // 调用方法

IO 流,文件相关方法

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;

String IOUtils.toString(InputStream,encoding);            // 文本文件流读出字符串
List<String> IOUtils.readLines(InputStream,encoding);    // 文本文件读出 List<String>
int IOUtils.copy(InputStream, OutputStream);

void FileUtils.writeStringToFile(File, String, Charset);
void FileUtils.deleteDirectory(File);

String FilenameUtils.getBaseName(filename);            // 获取文件名
String FilenameUtils.getExtension(filename);        // 获取扩展名
String FilenameUtils.separatorsToUnix(String path);    // 转成 linux 路径分隔符 

加解密相关

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;

byte[] Base64.encodeBase64(byte []);
byte[] Base64.decodeBase64(byte[]);

char [] Hex.encodeHex(byte []);
byte [] Hex.decodeHex(char []);

String DigestUtils.md5Hex(String);
String DigestUtils.shaHex(String);

随机数生成

import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.RandomStringUtils;

int RandomUtils.nextInt(start,end);
long RandomUtils.nextLong(start,end);

String RandomStringUtils.randomNumeric(count);
String RandomStringUtils.randomAlphabetic(count);

其它可以用到的工具

// 秒表
import org.apache.commons.lang3.time.StopWatch;
StopWatch stopWatch = new StopWatch();
stopWatch.start();
stopWatch.getTime();
stopWatch.stop();

//spring 获取方法参数名称
import org.springframework.core.ParameterNameDiscoverer;
ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);

//spring 用于处理逗号分隔符的字符串列表方法
import org.springframework.util.StringUtils;
String [] StringUtils.tokenizeToStringArray(String str, String delimiters);

sanri-tools 工具

https://blog.csdn.net/sanri1993/article/details/98664034

正文完
 0