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的使用詳