Apache Commons常用工具类
文章目录
Commons类库
工具类就是为了提高开发效率而出现的,很多实现逻辑方式是固定的,那么就可以作为工具类使用,不需要重复实现,简化代码。
StringUtils
StringUtils是我们开发过程中常用的工具类,其中的的方法也比较熟悉,比如
两个字符串的比较
//比较两个字符串是否相同,即使a或者b有为空的情况,那么也能比较不会出现空指针现象
String a = "A";
String b = "B";
if (StringUtils.equals(a,b)){
System.out.println("a和b相同");
}else {
System.out.println("a和b不相同");
}
//超类Object有相同功能的方法equals,但是如a为空,那么就会出现空指针现象
String b = "B";
if (a.equals(b)){
System.out.println("a和b相同");
}else {
System.out.println("a和b不相同");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
判断字符串是否为空
//判断字符串是否为空StringUtils工具类中有多个方法,可以根据注释了解每种方法的具体使用方式
StringUtils.isAllBlank(a); StringUtils.isBlank(a); StringUtils.isAnyBlank(a);
StringUtils.isAllEmpty(a); StringUtils.isEmpty(a); StringUtils.isAnyEmpty(a);
//其中isBlank和isEmpty的区别在于如果字符串为空格字符串如:" ",那么isBlank会认为空返回true,而isEmpty不认为是空,返回false,其他方法类似
//当然StringuUtils也有对应判断字符串不为空的方法,即在以上方法中名中加一个Not,如:isNotBlank
- 1
- 2
- 3
- 4
- 5
- 6
判断包含关系
//判断某个字符串是否包含另外一个字符串,StringUtils中提供了过个方法,其实通过方法名就能猜到每个方法的使用方式
StringUtils.contains(a,b);
StringUtils.containsAny(a,b);
StringUtils.containsNone(a,b);
StringUtils.containsOnly(a,b);
- 1
- 2
- 3
- 4
- 5
其实StringUtils中很多方法与String中的方法相同,但是可以避免空指针异常,比如:
String中有方法startWith() 和 endWith() 若一个字符串为空的时候调用方法就会报空指针异常,但是使用StringUtils就可以避免
//若a为字符串,但是可能为空,那么就可能出现空指针
boolean rs = a.endWith("b");
//若使用工具类StringUtils,那么即使a为空也不会出现空指针
boolean rs = StringUtils.endWith(a,"b");
- 1
- 2
- 3
- 4
- 5
StringUtils工具类还有其他的一些String用到的方法
StringUtils.replace() 将字符串中某些内容替换
StringUtils.indexOf() 判断某个字符在字符串中的第一次出现的下标位置
StringUtils.lastIndexOf() 判断某个字符在字符串中最后一次出现的位置
。。。。
DateUtils
DateUtils工具类我们通过类名就能明白这个类是对时间操作的工具类。
日期增加
如果我们想在当前时间推后一天,若按照以前的方式我们可能需要判断目前的日期是的“日”是哪一天,如果是“30日”还需要判断,月份是哪个月,有没有31日,如果是28日,或者29日,还需要判断是不是2月份,年份是闰年还是平年,如果是31日,还得判断是哪个月,如果是12月份,那么月份就不能直接加一,而是赋值为一,等等一系列判断,非常繁琐。那么使用DateUtils只需要一行代码就能解决。
//今天是2019年8月31日
String day = “2019年8月31日”;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date today = dateFormat.parse(day);
Date tomorrow= DateUtils.addDays(today, 1);
String rs = dateFormat.format(tomorrow);
System.out.println(rs)
结果:2019年09月01日
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
注意:如果今天的时间写错了,比如:2019年8月32日,那么系统会自动将今天的时间变成2019年9月1日,明天的时间则为2019年09月02日
除了添加一天的方法,也有添加一小时,一周的方法等
DateUtils.addYears(); //添加年
DateUtils.addMonths(); //添加月
DateUtils.addWeeks(); //添加周
DateUtils.addDays(); //添加天
DateUtils.addHours(); //添加小时
DateUtils.addMinutes(); //添加分钟
DateUtils.addSeconds() //添加秒
。。。。。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
日期比较
日期比较也是我们常用到的时间处理方式,比较两个日期是否是同一天,那么可能需要先比较年,再比较月,最后比较日,整个代码比较繁琐,使用DateUtils工具类也是只需要一行代码就能解决。
//判断两个日期是否相同
boolean sameDay = DateUtils.isSameDay(date2, date1);
- 1
- 2
其他
DateUtils工具类还提供了将日期Date转换成日历的方法
Calendar calendar = DateUtils.toCalendar(date);
- 1
CollectionUtils
CollectionUtils工具类是对集合的一些操作。可能我们平常最多用到的方法是判断集合是否为空
//CollectionUtils不仅可以判断Collection的子集合,也能判断Map是否为空
boolean empty = CollectionUtils.isEmpty(list);
- 1
- 2
判断两个集合是否有相同的元素
//判断两个集合如果有相同的元素返回true,反之返回false
boolean b = CollectionUtils.containsAny(list, list2);
- 1
- 2
将数组转换成list集合
//平常在代码中将数组转换成list可能常用的java.util包 Arrays.asList()
List<String> list = Arrays.asList(arr);
//CollectionUtils工具类也提供了将诉数组转换成list,返回的list是没有泛型的
List list = CollectionUtils.arrayToList(arr);
- 1
- 2
- 3
- 4
- 5
获取集合list 或者 set 的最后一个元素
//我们如果想要获取list的最后一个元素的话可以使用下标,因为list的有序的
String last = list.get(list.size() - 1);
//但是如果要获取set集合的最后一个元素就比较麻烦,set的无序的没有下标,但是可以使用CollectionUtils工具类
String last = CollectionUtils.lastElement(set);
- 1
- 2
- 3
- 4
FileUtils
FileUtils工具类从名称也能看出来是对文件的一些操作。
拷贝文件或目录
复制文件或者文件夹,使用常规的方法,就会先从某个文件目录中读取文件或者文件夹,然后再写出到另外一个文件目录中,但是如果使用工具FileUtils就可以跟方便的实现,如下:
//将文件夹original中的文件全部拷贝到文件夹objective
File srcDir = new File("G:\\original");
File destDir = new File("G:\\objective");
try {
FileUtils.copyDirectory(srcDir,destDir);
} catch (IOException e) {
e.printStackTrace();
}
//拷贝文件
File srcFile = new File("G:\\original\\src\\test.txt");
File destFile = new File("G:\\objective\\desc\\copy.txt");
try {
FileUtils.copyFile(srcFile,destFile);
} catch (IOException e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
上面的方法是将某个目录下的文件拷贝到另外的目录下,或者将某个文件拷贝到另外一个文件中,下面还有其他拷贝方法
//本方法是将目录original,整体拷贝到目录objective中,即在目录objective下面有个子目录original
File srcDir = new File("G:\\original");
File destDir = new File("G:\\objective");
try {
FileUtils.copyDirectoryToDirectory(srcDir,destDir);
} catch (IOException e) {
e.printStackTrace();
}
//将text.txt文件拷贝到objective目录下,文件名保持原来的
File srcFile = new File("G:\\original\\src\\test.txt");
File file = new File("G:\\objective");
try {
FileUtils.copyFileToDirectory();
} catch (IOException e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
删除文件或目录
FileUtils提供了删除文件或目录的方法,比如要清空某个文件目录下的所有内容,如下:
//清空目录objective下的所有内容,但是不删除objective目录
File file = new File("G:\\objective");
try {
FileUtils.cleanDirectory(new File("G:\\objective"));
} catch (IOException e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
与cleanDirectory()方法不同的还有一个删除目录的方法
//删除目录objective以及子目录子文件,即G盘下没有了objective目录
File file = new File("G:\\objective");
try {
FileUtils.deleteDirectory(file);
} catch (IOException e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
读写文件
FileUtils工具类中提供了一些读取文件的方法
//读取文件返回读取的内容字符串,另一个重载的方法可以设置编码
String context = FileUtils.readFileToString(file);
String context = FileUtils.readFileToString(file,encoding);
//读取文件返回字节数组
byte[] bytes = FileUtils.readFileToByteArray(file);
//读取文件返回流
FileInputStream fileInputStream = FileUtils.openInputStream(file);
FileOutputStream fileOutputStream = FileUtils.openOutputStream(file);
//既然有读取文件内容的方法那么必然也有写的方法
FileUtils.writeStringToFile(file,data);
FileUtils.writeStringToFile(file,data,encoding);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
IOUtils
IOUtils是对流的操作,我们常常操作文件的时候就使用io流,所以上面FileUtils提到的文件复制也可以使用IOUtils实现,只是IOUtils是对文件流进行操作。
//IOUtils有多个重载的copy()方法,返回复制的字节数,示例如下:
File srcFile = new File("G:\\original\\src\\test - 副本.txt");
File destFile = new File("G:\\objective\\desc\\copy.txt");
try {
FileInputStream fileInputStream = FileUtils.openInputStream(srcFile);
FileOutputStream fileOutputStream = FileUtils.openOutputStream(destFile);
int copy = IOUtils.copy(fileInputStream, fileOutputStream);
System.out.println(copy);
} catch (IOException e) {
e.printStackTrace();
}
//copy方法
copy(InputStream input, OutputStream output)
copy(InputStream input, Writer output)
copy(InputStream input, Writer output, String encoding)
copy(Reader input, Writer output)
copy(Reader input, OutputStream output)
copy(Reader input, OutputStream output, String encoding)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
IOUtils还提供了两个重载的方法,用于判断两个流的内容是否相同,比如读取两个文件返回了流,那么想要判断两个文件的内容是否相同,那么可以使用IOUtils提供的方法
FileInputStream fileInputStream1 = FileUtils.openInputStream(destFile);
FileInputStream fileInputStream2 = FileUtils.openInputStream(destFile1);
boolean b = IOUtils.contentEquals(fileInputStream1, fileInputStream);
System.out.println(b);
//重载的方法
contentEquals(Reader input1, Reader input2)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
HttpClient
HttpClient是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)。以下是一个简单的Http请求使用GET方法
//客户端
public static void main(String[] args) {
//创建httpClient实例
HttpClient httpClient = new HttpClient();
//创建一个GET方法
GetMethod getMethod = new GetMethod("http://ip:port/MySpringBootDemo/api/test");
try {
//发起get请求
int code = httpClient.executeMethod(getMethod);
if (code != HttpStatus.SC_OK){
System.out.println("请求异常");
}
byte[] responseBody = getMethod.getResponseBody();
System.out.println(new String(responseBody,"utf-8"));
} catch (IOException e) {
e.printStackTrace();
}finally {
//释放连接
getMethod.releaseConnection();
}
}
............................................................................................................
//服务端
@RestController
@RequestMapping("/api")
public class ConfigurationApplication {
@RequestMapping("test")
@ResponseBody
public void getNpws(HttpServletResponse response){
File file = new File("G:\\objective\\desc\\copy.txt");
getFile(response,file);
}
private void getFile(HttpServletResponse response,File file) {
try(
OutputStream output = response