本文整理了我自己在 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 的使用详解
来源: https://www.cnblogs.com/kexing/p/11930390.html