前言
见过大多数公司都有封装自己的工具类,很多已经有人实现了方法又重新实现一遍,不仅代码质量得不到保证,而且性能,并发都会有问题;反正我一般不用公司封装的工具类,像 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);