Java开发中常用jar包整理及使用
本文整理了我自己在Java开发中常用的jar包以及常用的API记录。
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
common-lang3
简介
一个现在最为常用的jar包,封装了许多常用的工具包
在线API
依赖:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
主要常见的类如下:
- 数组工具类 ArrayUtils
- 日期工具类 DateUtils DateFormatUtils
- 字符串工具类 StringUtils
- 数字工具类 NumberUtils
- 布尔工具类 BooleanUtils
- 反射相关工具类 FieldUtils、MethodUtils、MemberUtils、TypeUtils、ConstructorUtils
- 对象工具类 ObjectUtils
- 序列化工具类 SerializationUtils
API介绍
这里我只介绍经常使用的几个工具类及方法,ArrayUtils,StringUtils,NumberUtils,DateUtils,其他的请查看官方API文档吧
1.ArrayUtils
| 方法名 | 说明 |
|---|---|
| add | |
| remove | |
| clone | 复制数组 |
| addAll | |
| removeAll | 第二个参数传入需要删除的下标(可以指定多个下标) |
| toObject | 把数值(int[],double[])转为包装类(Int[],Double[]) |
| indexOf | 在数组按顺序查找,找到第一个满足对应的数值的下标 |
| lastIndexOf | 在数组按顺序查找,找到最后一个满足对应的数值的下标 |
| contains | 数组是否包含某个值 |
| isEmpty | 判断数组是否为空 |
| isNotEmpty | 判断数组是否不为空 |
| reverse | 数组反转 |
| subarray | 指定区间截取数组,区间为半开区间,不包含末尾 |
| toArray | 接收一个多个对象,把这几个对象转为对应类型的数组 |
| toMap | 将一个二维数组转为Map |
2.NumberUtils
| 方法名 | 说明 |
|---|---|
| min | 比较三个数,返回最小值 或比较指定的几个数,返回最小值 |
| max | 比较三个数,返回最大值 或比较指定的几个数,返回最大值 |
| createInt | 从传入的String中创建对应类型的数值,createDouble,createFloat... |
| toInt | 将指定字符串转为Int类型,可以选择指定默认数值,如果字符串为null则返回默认数值,除此之外,还有toDouble,toLong...等转为不同类型的方法 |
| compare | 比较两个同类型数值的大小 |
| isDigits | 判断字符串是否只包含数字 |
| isParsable | 判断字符串是否可转换为Long,Int等类型 |
| isNumber | 判断字符串是否为数值(0x,0X开头等进制数值) |
3.DateUtils
| 方法名 | 说明 |
|---|---|
| parseDate | 将Date对象转为字符串 |
| isSameDay | 判断两个Dated对象是否为同一天 |
| isSameDay | 判断两个Dated对象是否为同一天 |
| addHour | 将指定的Date对象加上指定小时,除此之外,还有addMonth,addDay..等 |
DateFormatUtils正如其名,是用来把时间转为字符串,这里就不再多说
4.StringUtils
| 方法名 | 说明 |
|---|---|
| join | 将指定的数组连接成字符串,并添加指定的分割字符 |
| containOnly | 字符串是否只包含某个字符串 |
| substringBefore | 截取指定字符串前面的内容 |
| substringAfter | 截取指定字符串后面的内容(不包括指定字符串) |
| substringBetween | 截取字符串某区间内容,如substringBetween("abcde","a","e")="bcd" |
| difference | 比较两个字符串,返回两个字符串不同的内容,具体可以看API文档给出的示例 |
| isBlank | 判断字符串是否为空白,null,""," "这三个结果都是为true |
| isEmpty | 判断字符串是否为空(只要不为null,或传入的String对象的长度不为0即为true) |
| countMatches | 判断指定的字符串在某个字符串中出现的次数 |
| deleteWhitespace | 删除字符串中的空格 |
| defaultIfBlank | 如果字符串为空白,则返回一个指定的默认值(null或某个String) |
| defaultIfEmpty | 如果字符串为空,则返回一个指定的默认值(null或某个String) |
| capitalize | 将指定字符串首字母大写 |
| abbreviate | 将指定字符串的后面三位转为... |
| swapCase | 将字符串中的字母大小写反转,如aBc变为AbC |
| lowerCase | 将字符串的字母全部转为小写 |
| upperCase | 将字符串的字母全部转为大写 |
| left | 取字符串左边几个字符,如left("hello",3)="hel",right与此相反 |
| leftPad | 字符串的长度不够,则使用指定字符填充指定字符串,如leftPad("hel",5,"z")="zzhel",rightPad方法与此相反 |
| prependIfMissing | 指定字符串不以某段字符串开头,则自动添加开头,如prependIfMissing("hello","li")="lihello" |
| prependIfMissing | 指定字符串不以某段字符串开头(忽略大小写),则自动添加开头 |
| getCommonPrefix | 获得多个字符串相同的开头内容,接收参数为多个字符串 |
| removeEnd | 删除字符串中结尾(满足是以某段内容结尾),如removeEnd("hello","llo")="he" |
| removeEndIgnoreCase | 与上面一样,忽略大小写 |
| removeStart | 与上面的相反 |
| remove | 删除字符串中的指定内容,如remove("hello","l")="heo" |
| removeIgnoreCase | 删除字符串中的指定内容,如remove("hello","l")="heo" |
| strip | 清除字符串开头和末尾指定的字符(第二个参数为null,用来清除字符串开头和末尾的空格),如strip(" abcxy","xy")=" abc",strip(" abcxy","yx")=" abc" |
| stripStart | 清除字符串开头指定字符 |
| stripEnd | 清除字符串末尾指定的字符 |
common-io
简介
常用的IO流工具包
在线API
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
API
我们主要关心的就是Utils后缀的那几个类即可,可以看到,common-io库提供了FileUtils,FileSystemUtils,FileNameUtils,FileFilterUtils,IOUtils
FileUtils
- 写出文件
- 读取文件
- 创建一个有父级文件夹的文件夹
- 复制文件和文件夹
- 删除文件和文件夹
- URL转文件
- 通过过滤器和扩展名来筛选文件和文件夹
- 比较文件内容
- 文件最后修改时间
- 文件校验
FileSystemUtils
关于文件系统的相关操作,如查看C盘的大小,剩余大小等操作
IOUtils
字面意思,是封装了IO流的各种操作的工具类
Log4j
简介
Log4J 是 Apache 的一个开源项目,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。
我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程,方便项目的调试。
依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
结构
Log4J 主要由 Loggers (日志记录器)、Appenders(输出端)和 Layout(日志格式化器)组成。
其中Loggers 控制日志的输出级别与日志是否输出;
Appenders 指定日志的输出方式(输出到控制台、文件等);
Layout 控制日志信息的输出格式。
日志级别:
| 级别 | 说明 |
|---|---|
| OFF | 最高日志级别,关闭左右日志 |
| FATAL | 将会导致应用程序退出的错误 |
| ERROR | 发生错误事件,但仍不影响系统的继续运行 |
| WARN | 警告,即潜在的错误情形 |
| INFO | 一般和在粗粒度级别上,强调应用程序的运行全程 |
| DEBUG | 一般用于细粒度级别上,对调试应用程序非常有帮助 |
| ALL | 最低等级,打开所有日志记录 |
我们主要使用这四个:Error>Warn>Info>Debug
使用
我们可以使用两种方式来运行Log4j,一种是java代码方式,另外一种则是配置文件方式
例子(Java方式)
public class Log4JTest {
public static void main(String[] args) {
//获取Logger对象的实例(传入当前类)
Logger logger = Logger.getLogger(Log4JTest.class);
//使用默认的配置信息,不需要写log4j.properties
BasicConfigurator.configure();
//设置日志输出级别为WARN,这将覆盖配置文件中设置的级别,只有日志级别低于WARN的日志才输出
logger.setLevel(Level.WARN);
logger.debug("这是debug");
logger.info("这是info");
logger.warn("这是warn");
logger.error("这是error");
logger.fatal("这是fatal");
}
}
例子(配置文件方式)
上面的例子,我们想要实现打印Log,但是每次都要写一遍,浪费时间和精力,所以,Log4j提供了另外一种方式来配置好我们的信息
创建一个名为log4j.properties的文件,此文件需要放在项目的根目录(约定),如果是maven项目,直接放在resources文件夹中即可
log4j.properties
#控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#log jdbc
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=WARN
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#log mybatis设置
#log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.org.apache.ibatis.jdbc=error
log4j.logger.org.apache.ibatis.io=info
log4j.logger.org.apache.ibatis.datasource=info
#springMVC日志
log4j.logger.org.springframework.web=WARN
# 文件输出配置
log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = D:/log.txt #指定日志的输出路径
log4j.appender.A.Append = true
log4j.appender.A.Threshold = DEBUG
log4j.appender.A.layout = org.apache.log4j.PatternLayout #使用自定义日志格式化器
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #指定日志的输出格式
log4j.appender.A.encoding=UTF-8 #指定日志的文件编码
#指定日志的输出级别与输出端
log4j.rootLogger=DEBUG,Console,A
#指定某个包名日志级别(不能超过上面定义的级别,否则日志不会输出)
log4j.logger.com.wan=DEBUG
之后使用的话就比较简单了
//Logger的初始化(这个推荐定义为全局变量,方便使用)
Logger logger = Logger.getLogger(Log4JTest.class);
//输出Log
logger.info("这是info");
参考链接:Log4j入门教程
lombok
简介
平常我们创建实体类的时候,需要get/set方法,极其麻烦,虽然IDEA等IDE都是有提供了快捷生成,不过,最好的解决方法还是省略不写
而lombok就是这样的一个框架,实现省略get/set方法,当然,lombok的功能不只有此,还有equal,toString方法也可以由此框架自动生成
lombok的原理是使用注解,之后就会在编译过程中,给Class文件自动加上get/set等方法
不过IDEA似乎无法识别,代码检查还是会报错,所以,使用IDEA的时候还得安装一个插件,在plugin搜索lombok,之后安装重启即可,如图

之后为Java项目添加依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
使用示例
1.实体类省略get/set
估计Kotlin中的data关键字就是参照着lombok实现的
//这里我们只需要为类添加Data注解,就会自动生成对应属性的get/set方法,toString,equal等方法
@Data
public class User {
private String username;
private String password;
}
2.需要无参构造以及get/set方法
@Getter
@Setter
@NoArgsConstructor
public class User {
private String username;
private String password;
}
3.链式调用set方法
@Data
@Accessors(chain = true)
public class User {
private String username;
private String password;
}
//使用
User user = new User();
user.setUsername("helo").setPassword("123");
4.参数不为空
//如果调用此方法,就会抱一个空指针错误
public String print(@NotNull String str){
...
}
5.只需要toString
@ToString(callSuper=true, includeFieldNames=true)
public class User {
private String username;
private String password;
//省略的get/set方法
}
6.builder模式创建实体类对象
@Data
@Builder
public class User {
private String username;
private String password;
}
//使用
User user1 = User.builder().username("user1").password("123").build();
7.工具类
@UtilityClass
public class MyUtils{
//会将此方法自动转为静态方法
public void print(String str){
...
}
}
//使用
MyUtils.print("hello");
8.自动关闭流
public static void main(String[] args) throws Exception {
//使用Cleanup会自动调用close方法
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[1024];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
9.省略Logger时的初始化
@Log4j
@Log
public class User{
//会自动添加此语句
//Logger logger = Logger.getLogger(User.class);
...
}
参考:
Lombok介绍、使用方法和总结
Lombok的使用详解
Java开发中常用jar包整理及使用的更多相关文章
- Java开发中Maven Jar包管理建议
Jar包管理规范 基于使用Git做版本控制,使用Jenkins做持续集成,以及Git-flow分支管理策略的情况: 带-SNAPSHOT为快照版本,例如1.0.0-SNAPSHOT 正式发布版本只有版 ...
- SSH框架应用中常用Jar包用途介绍
struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...
- 在java工程中导入jar包的注意事项
在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.
- java中常用jar包
commons-io.jar:可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤 ...
- java 项目中每个jar包的作用总结
别人的总结 1.Struts2 1)commons-fileupload :2)common-io:文件上传 3)commons-lang:它扩展了标准 java.langAPI ArrayUtils ...
- Java 开发中常用的网站地址
博客地址:http://www.moonxy.com 一.前言 在日常的开发中,通常需要访问或者设置不同的网站来获取需要的数据,不如我们都知道 Linux 系统版本比较多(例如:Ubuntu.Cent ...
- 关于Android开发中导出jar包后的资源使用问题解决
我们经常遇到一个需求,就是给别人使用我们工程的时候,为了能够屏蔽代码,把代码封装成jar包提供给第三方使用,但是这样我们的资源文件怎么给对方用呢? 其实并不用这么的复杂,下面就介绍一下具体的方法 一, ...
- IntelliJ IDEA Java项目中添加jar包
1. 事先下载完成需要的javacsv.jar包. java项目在没有导入该jar包之前,显示如下图所示 2. 点击 File -> Project Structure(快捷键 Ctrl + ...
- spring开发中commons-logging.jar包的功能
删除后程序会报错 Java.lang.NoClassDefFoundError 记录日志,通常和 log4j.jar共同使用 原因: 在 sun 开发 logger 前,apache 项目已经开发了 ...
随机推荐
- Vue躬行记(4)——组件
组件是可复用的Vue实例,拥有属于自己的数据.模板.脚本和样式,可避免繁重的重复性开发.由于组件都是独立的,因此其内部代码不会影响其它组件,但可以包含其它组件,并且相互之间还能通信. 一.注册 在使用 ...
- vue 动态数据绑定
动态数据绑定(一) 我的github iSAM2016 实现的步骤: 1.监听对象属性的读取与变化 Object.defineProperty() 方法会直接在对象上定义一个新的的属性,或者已经存在的 ...
- 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息
1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package Microsoft.Extensions.Logging.L ...
- 实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
本文为实战SpringCloud响应式微服务系列教程第九章,讲解使用Spring WebFlux构建响应式RESTful服务.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 从本节开始我们 ...
- markdown 入门教程(完整版)
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 1. 标题 Markdown支持6种级别的标题,对应html标签 h1 ~ h6 ...
- Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...
- 前端开发之VSCode扩展
1.Chinese (Simplified) Language Pack for Visual Studio Code——中文语言包 2.Beautify——代码格式化工具 3.HTML Snippe ...
- pythonpip的基本使用
pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能.目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具.Python 2.7 ...
- 第七章 文件与I/O(4)
文件共享 打开文件内核数据结构 一个进程两次打开同一个文件 一个进程能打开1024个文件描述符,没打开一个文件,内核会生成一个文件表,文件表中的v节点指针指向v节点表,v节点部分信息就是stat函数返 ...
- CSPS模拟 85
WWB大佬的bitset映射真是太强了! %%% T1 观察样例,猜规律. T2 对题目的翻译工作用了很长时间 翻译错了好几次.. 观察到奇环没法染色,选的边必须把奇环弄断 如果在偶环上,偶环就变得没 ...