Java開發中經常使用jar包整理及使用

本文整理了我本身在Java開發中經常使用的jar包以及經常使用的API記錄。html

<!-- 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包,封裝了許多經常使用的工具包java

在線API
依賴:git

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

主要常見的類以下:web

  • 數組工具類 ArrayUtils
  • 日期工具類 DateUtils DateFormatUtils
  • 字符串工具類 StringUtils
  • 數字工具類 NumberUtils
  • 布爾工具類 BooleanUtils
  • 反射相關工具類 FieldUtils、MethodUtils、MemberUtils、TypeUtils、ConstructorUtils
  • 對象工具類 ObjectUtils
  • 序列化工具類 SerializationUtils

API介紹

這裏我只介紹常用的幾個工具類及方法,ArrayUtils,StringUtils,NumberUtils,DateUtils,其餘的請查看官方API文檔吧spring

1.ArrayUtilssql

方法名 說明
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.DateUtilsapache

方法名 說明
parseDate 將Date對象轉爲字符串
isSameDay 判斷兩個Dated對象是否爲同一天
isSameDay 判斷兩個Dated對象是否爲同一天
addHour 將指定的Date對象加上指定小時,除此以外,還有addMonth,addDay..等

DateFormatUtils正如其名,是用來把時間轉爲字符串,這裏就再也不多說api

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

相關文章
相關標籤/搜索