本文整理了我本身在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>
一個如今最爲經常使用的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,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 | 清除字符串末尾指定的字符 |
經常使用的IO流工具包
在線API
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
咱們主要關心的就是Utils後綴的那幾個類便可,能夠看到,common-io庫提供了FileUtils,FileSystemUtils,FileNameUtils,FileFilterUtils,IOUtils
關於文件系統的相關操做,如查看C盤的大小,剩餘大小等操做
字面意思,是封裝了IO流的各類操做的工具類
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代碼方式,另一種則是配置文件方式
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入門教程
日常咱們建立實體類的時候,須要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); ... }