平常我们在日常的开发中会一些通用的功能封装成一些工具类,以便之后复用。但是有些常用功能,业界已经存在,我们无需造轮子,只需直接使用或借用它们的 Api ,构建我们的自己项目中工具类。这篇首先介绍平常用到的 Apache 工具全家桶。
- commons-lang3
- commons-io
- commons-collections
commons-lang3
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods.
正如 Apache 官方介绍,这个包主要扩展 java.lang 下核心类的方法,提供工具类方便我们平常 java.lang 下面的类,如 String , Date。以下介绍其常用的方法。
StringUtils
字符串相关操作,扩展 String 相关方法,可以使我们方便处理字符串,满足我们的日常使用。
StringUtils.isBlank || StringUtils.isEmpty 判断字符串是否为空
// 两者都可以用于判断字符串是为空 isBlank 主要用于判断空白字符串 空字符("") 以及Null 而 isEmpty 主要用于判断空字符("")以及Null
StringUtils.isBlank(" ") = true
StringUtils.isEmpty(" ") = false
复制代码
StringUtils.countMatches 用于计数匹配上字符的数量
StringUtils.countMatches("abba", "a") = 2
复制代码
StringUtils.defaultIfEmpty 用于当字符串为空时,设置默认字符串
StringUtils.defaultIfEmpty("", "NULL") = "NULL"
复制代码
StringUtils.equalsIgnoreCase StringUtils.equals 用于判断字符串是否相等,前者忽略大小写
StringUtils.equals("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true
// 推荐使用该方法比较字符串,如果使用 a.equals(b),必须确保 a!=null
StringUtils.equals(null, "abc") = false
复制代码
StringUtils.join 字符串连接函数,可以将字符串数组或集合,按照指定字符连接
// 碰到这种需要固定分隔符拼接的情况,可以使用该函数,以免我们写一大串函数循环拼接
StringUtils.join(["a", "b", "c"], ';') = "a;b;c"
复制代码
StringUtils.split 说完拼接,必定会有按照固定分隔符拆分的情况
// split 分隔后会忽略为空的字符 如果不能忽略的话 使用 splitPreserveAllTokens
StringUtils.split("ab::ef", ":") = ["ab", "ef"]
StringUtils.splitPreserveAllTokens("ab::ef",":")=["ab", "", "ef"]
复制代码
ArrayUtils
由于平常工作中习惯用集合代替数组对象,所以没有经常使用该类。
ArrayUtils.isEmpty 判断数组是否为空
int[] a = new int[5];
ArrayUtils.isEmpty(a)=true
复制代码
DateFormatUtils
将时间按照指定格式输出
DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"
//2018-05-27 16:32:51
复制代码
DateUtils
该类可以将时间按照格式解析成 Date 类型,还可以用于时间计算
DateUtils.parseDate 按照格式转化成 Date 类型
DateUtils.parseDate("2018-05-27 16:32:51","yyyy-MM-dd HH:mm:ss") // 将字符串转化成 Date 对象
复制代码
DateUtils.addDays addHours addMinutes 用于在指定 Date 加上相应时间,如想获取当前时间20天后的日期,就就可以使用 DateUtils.addDays。
Date date=DateUtils.parseDate("2018-05-27 16:32:51","yyyy-MM-dd HH:mm:ss");
DateUtils.addDays(date,1);// date 为:2018-05-28 16:32:51
DateUtils.addHours(date,1)// date 为:2018-05-28 17:32:51
复制代码
DateUtils.truncate 按照指定时间类型截断时间
Date date=DateUtils.parseDate("2018-05-27 16:32:51","yyyy-MM-dd HH:mm:ss");
DateUtils.truncate(date, Calendar.DATE);// 2018-05-27 00:00:00
DateUtils.truncate(date, Calendar.HOUR);// 2018-05-27 16:00:00
// 如果按照 Date 截断时间,那么 Date 后面小时,分钟等全部置为0,相当于舍弃了 Date 之后的时间。
复制代码
commons-io
Commons IO is a library of utilities to assist with developing IO functionality.
主要包含一些 IO 相关的工具类,可以简化处理文件相关操作
FileUtils
文件操作相关工具类
FileUtils.copyDirectory || FileUtils.copyFile 拷贝文件夹或文件
// 拷贝文件
File fileA = new File("E:\\test\\test.txt");
File fileB = new File("E:\\test1\\test.txt");
FileUtils.copyFile(fileA,fileB);
复制代码
FileUtils.listFiles 获取指定文件夹上所有文件
// 按照指定文件后缀如java,txt等去查找指定文件夹的文件
File directory = new File("E:\\test");
FileUtils.listFiles(directory, new String[]{"txt"}, false);
复制代码
FileUtils.readLines 读取文件所有行
// 读取指定文件所有行 不需要使用 while 循环读取流了
List<String> lines = FileUtils.readLines(fileA)
复制代码
FileUtils.writeLines 有读就存在写,该方法可以一行行写入文本
// 可以一行行写入文本
List<String> lines = new ArrayList<>();
.....
FileUtils.writeLines(lines)
复制代码
IOUtils
Io 操作相关,FileUtils 很多方法底层调用的是该类的方法
IOUtils.toString 将输入流转化为指定编码格式的字符串,该方法非常使用与 http 异步回调的场景
// 获取 http 异步回调的报文
String resMsg = IOUtils.toString(request.getInputStream());
复制代码
IOUtils.toByteArray 将输入流转化为 byte 数组
// 获取 http 异步回调的报文
byte[] b = IOUtils.toByteArray(request.getInputStream());
复制代码
IOUtils.closeQuietly 关闭流,不需要在关闭前写判断和try-catch语句,commons-io 2.6 该方法已被 Deprecated , 官方推荐使用 JDK7 try-with-resources 关闭。注: 该方法如果在输入流等 close 时,若产生 Exception ,异常将会被该方法吞掉。
FilenameUtils
在处理一些文件路径问题时,如果我们代码开发在 Windows 平台,部署却是在 Linux 平台,这个时候我们必须考虑平台分隔符问题。FilenameUtils 解决了平台问题,不用担心平台系统问题,导致的bug。
FilenameUtils.getBaseName 获取文件名字,去除前缀加扩展名 FilenameUtils.getExtension 获取文件扩展名,去除路径以及文件名 FilenameUtils.getName 获取文件全名,去除路径
FilenameUtils.getBaseName("E:\\test\\test.txt")//test
FilenameUtils.getExtension("E:\\test\\test.txt")//txt
FilenameUtils.getName("E:\\test\\test.txt")// test.txt
复制代码
FilenameUtils.concat 文件路径拼接,不用担心文件的分隔符
FilenameUtils.concat("E:\\test", "test.txt");//E:\test\test.txt
复制代码
commons-collections
The Java Collections Framework was a major addition in JDK 1.2. It added many powerful data structures that accelerate development of most significant Java applications. Since that time it has become the recognised standard for collection handling in Java
commons-collections 主要增强 java Collections 功能
CollectionUtils
为 Collection 实例提供工具方法
CollectionUtils.addAll 可以将数组,集合加入到指定集合,解决需要将数组加入到集合中情况
List<String> listA = new ArrayList<>();
listA.add("1");
listA.add("2");
listA.add("3");
String[] arrays = new String[]{"a", "b", "c"};
CollectionUtils.addAll(listA, arrays);
复制代码
CollectionUtils.isEmpty CollectionUtils.isNotEmpty 快捷判断集合是否为空