常用的 Java 工具类之 Apache 全家桶使用

平常我们在日常的开发中会一些通用的功能封装成一些工具类,以便之后复用。但是有些常用功能,业界已经存在,我们无需造轮子,只需直接使用或借用它们的 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 快捷判断集合是否为空

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET MAUI实战 MessagingCenter

1.概要在.NET MAUI提供了消息机制&#xff0c;该机制为订阅/发布模式。发布-订阅模式是一种消息传递模式&#xff0c;在此模式下&#xff0c;发布者可在无需知道任何接收方&#xff08;称为订阅方&#xff09;的情况下发送消息。同样&#xff0c;订阅方可在不了解任何发布方的情…

elasticsearch 5.1 问题 ubuntu

1、can not run elasticsearch as root 切换到非root用户 2、main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register") 改变elasticsearch文件夹所有者到当前用…

洛谷——P1033 自由落体

https://www.luogu.org/problem/show?pid1033#sub 题目描述 在高为 H 的天花板上有 n 个小球&#xff0c;体积不计&#xff0c;位置分别为 0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0e;n-1。在地面上有一个小车&#xff08;长为 L&#xff0c;高为 K&#xff0c;距…

java 接口防刷_java轻量级接口限流/防刷插件

简介call-limit提供接口限流、防刷的功能&#xff0c;插件基于spring开发&#xff0c;在应用应用的任何一个逻辑层皆可使用(web、service、dao)&#xff0c;插件支持单机应用下的限流和分布式应用的限流(分布式应用限流需要依赖redis)&#xff0c;在简单业务场景下插件可为大家…

【leetcode】521. Longest Uncommon Subsequence I

题目如下&#xff1a; 解题思路&#xff1a;本题有点意思。首先如果输入的两个字符串都为空&#xff0c;那么结果是-1&#xff1b;如果两个字符串长度不一样&#xff0c;那么结果是较长的字符串的长度&#xff0c;因为较长的字符串肯定是自身的子序列&#xff0c;但一定不是较短…

【问题】为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?...

【问题】为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍&#xff1f;独立观察员 2022 年 9 月 4 日在编写 “Wifi 固定器 [1]” 程序时&#xff0c;按如下方式使用了定时器&#xff1a;// 声明&#xff1b; private Timer _Timer new Timer() { …

JS魔法堂:判断节点位置关系

一、前言                           在polyfill querySelectorAll 和写弹出窗时都需要判断两个节点间的位置关系&#xff0c;通过jQuery我们可以轻松搞定&#xff0c;但原生JS呢&#xff1f;下面我将整理各种判断方法&#xff0c;以供日后查阅。 二…

ChartCtrl源码剖析之——CChartAxis类

CChartAxis类用来绘制波形控件的坐标轴&#xff0c;这个源码相对较复杂&#xff0c;当初阅读的时候耗费了不少精力来理解源码中的一些实现细节。 CChartAxis类的头文件。 #if !defined(AFX_CHARTAXIS_H__063D695C_43CF_4A46_8AA0_C7E00268E0D3__INCLUDED_) #define AFX_CHARTA…

java如何输出线程的标识符_Java多线程面试题

1、在Java中什么是进程&#xff0c;什么是线程进程&#xff1a;进程是程序执行的一个实例&#xff0c;进程是线程的容器。程序是指令、数据及其组织形式的描述&#xff0c;进程是程序的实体。线程&#xff1a;有时被称为轻量级进程(Lightweight Process&#xff0c;LWP)&#x…

基于.net开发的自助餐饮系统

本文系 EMQ&Intel 联合举办的首届“中国物联网数据基础设施最佳案例评选大赛“个人开发者赛道一等奖作品。项目简介智能餐饮自助结算系统是一个由称重系统、显示屏、自助扫码盒和 Intel CPU 组成的智能自助结算终端&#xff0c;将装有菜品的托盘放到秤盘上结算&#xff0c;…

cacti 被监控机器snmp 配置

被监控服务器 需要查看网卡流量&#xff0c; 磁盘空间等信息。修改如下。vi /etc/snmp/snmpd.conf1、找到com2sec notConfigUser default public 改为&#xff1a;com2sec notConfigUser 192.168.1.1&#xff08;改成监控服务器的ip&#xff09; public 2、找到…

IntentService用法

IntentService 用完即走 IntentService&#xff0c;可以看做是Service和HandlerThread的结合体&#xff0c;在完成了使命之后会自动停止&#xff0c;适合需要在工作线程处理UI无关任务的场景。 IntentService 是继承自 Service 并处理异步请求的一个类&#xff0c;在 IntentSer…

TeaPot 用webgl画茶壶(3) 环境纹理和skybox

1 <html>2 <head>3 <title>TeaPolt</title>4 </head>5 6 <body οnlοad"main()">7 <canvas id"viewPort" width"600" height"600">8 This b…

java打包维护_java打包详解

from yahh2008的blog: http://www.matrix.org.cn/blog/yahh2008/兄弟&#xff0c;对java着迷吗&#xff0c;或者是为了自己的生计&#xff0c;不论怎样都欢迎你进入精彩java世界&#xff0c;welcome&#xff01;可能你刚刚对每个人说&#xff1a;Hello World&#xff01;也或者…

Linux高级文本处理之sed(三)

sed高级命令sed允许将多行内容读取到模式空间&#xff0c;这样你就可以匹配跨越多行的内容。本篇笔记主要介绍这些命令&#xff0c;它们能够创建多行模式空间并且处理之。其中&#xff0c;N/D/P这三个多行命令分别对应于小写的n/d/p命令&#xff0c;后者我们在上一篇已经介绍。…

如何在 C# 程序中注入恶意 DLL ?

一&#xff1a;背景 前段时间在训练营上课的时候就有朋友提到一个问题&#xff0c;为什么 Windbg 附加到 C# 程序后&#xff0c;程序就处于中断状态了&#xff1f;它到底是如何实现的&#xff1f;其实简而言之就是线程的远程注入&#xff0c;这一篇就展开说一下。二&#xff1a…

练习题|网络编程-socket开发

原文&#xff1a;https://www.cnblogs.com/shengyang17/p/8822745.html 1、什么是C/S架构&#xff1f; C指的是client&#xff08;客户端软件&#xff09;&#xff0c;S指的是Server&#xff08;服务端软件&#xff09;&#xff0c;C/S架构的软件&#xff0c;实现服务端软件与客…

okhttputils java_Java OkHttpUtils.post方法代码示例

import com.zhy.http.okhttp.OkHttpUtils; //导入方法依赖的package包/类Overridepublic void performRequestAsync(AyoRequest request, BaseResponseDispatcher responseHandler, BaseHttpCallback callback) {String url request.url;//基于OkHttpUtils辅助类//1 method决定…

近日安排

先把二分题做了&#xff0c;二分哪个小白书学了。 做图论题&#xff0c;4道转载于:https://www.cnblogs.com/no-regrets/p/7215366.html

ABP vNext微服务架构详细教程(补充篇)——单层模板(上)

简介在之前的《ABP vNext微服务架构详细教程》系列中&#xff0c;我们已经构建了完整的微服务架构实例&#xff0c;但是在开发过程中&#xff0c;我们会发现每个基础服务都包含10个类库&#xff0c;这是给予DDD四层架构下ABP的实现方案&#xff0c;但是实际使用中我们会发现&am…