1. 程式人生 > >Java開發中常用jar包整理及使用

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