文章目錄
Commons類庫
工具類就是為了提高開發效率而出現的,很多實現邏輯方式是固定的,那么就可以作為工具類使用,不需要重復實現,簡化代碼。
StringUtils
StringUtils是我們開發過程中常用的工具類,其中的的方法也比較熟悉,比如
兩個字符串的比較
//比較兩個字符串是否相同,即使a或者b有為空的情況,那么也能比較不會出現空指針現象 String a = "A"; String b = "B"; if (StringUtils.equals(a,b)){ System.out.println("a和b相同"); }else { System.out.println("a和b不相同"); } //超類Object有相同功能的方法equals,但是如a為空,那么就會出現空指針現象 String b = "B"; if (a.equals(b)){ System.out.println("a和b相同"); }else { System.out.println("a和b不相同"); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
判斷字符串是否為空
//判斷字符串是否為空StringUtils工具類中有多個方法,可以根據注釋了解每種方法的具體使用方式 StringUtils.isAllBlank(a); StringUtils.isBlank(a); StringUtils.isAnyBlank(a); StringUtils.isAllEmpty(a); StringUtils.isEmpty(a); StringUtils.isAnyEmpty(a); //其中isBlank和isEmpty的區別在於如果字符串為空格字符串如:" ",那么isBlank會認為空返回true,而isEmpty不認為是空,返回false,其他方法類似 //當然StringuUtils也有對應判斷字符串不為空的方法,即在以上方法中名中加一個Not,如:isNotBlank
- 1
- 2
- 3
- 4
- 5
- 6
判斷包含關系
//判斷某個字符串是否包含另外一個字符串,StringUtils中提供了過個方法,其實通過方法名就能猜到每個方法的使用方式 StringUtils.contains(a,b); StringUtils.containsAny(a,b); StringUtils.containsNone(a,b); StringUtils.containsOnly(a,b);
- 1
- 2
- 3
- 4
- 5
其實StringUtils中很多方法與String中的方法相同,但是可以避免空指針異常,比如:
String中有方法startWith() 和 endWith() 若一個字符串為空的時候調用方法就會報空指針異常,但是使用StringUtils就可以避免
//若a為字符串,但是可能為空,那么就可能出現空指針 boolean rs = a.endWith("b"); //若使用工具類StringUtils,那么即使a為空也不會出現空指針 boolean rs = StringUtils.endWith(a,"b");
- 1
- 2
- 3
- 4
- 5
StringUtils工具類還有其他的一些String用到的方法
StringUtils.replace() 將字符串中某些內容替換
StringUtils.indexOf() 判斷某個字符在字符串中的第一次出現的下標位置
StringUtils.lastIndexOf() 判斷某個字符在字符串中最后一次出現的位置
。。。。
DateUtils
DateUtils工具類我們通過類名就能明白這個類是對時間操作的工具類。
日期增加
如果我們想在當前時間推后一天,若按照以前的方式我們可能需要判斷目前的日期是的“日”是哪一天,如果是“30日”還需要判斷,月份是哪個月,有沒有31日,如果是28日,或者29日,還需要判斷是不是2月份,年份是閏年還是平年,如果是31日,還得判斷是哪個月,如果是12月份,那么月份就不能直接加一,而是賦值為一,等等一系列判斷,非常繁瑣。那么使用DateUtils只需要一行代碼就能解決。
//今天是2019年8月31日 String day = “2019年8月31日”; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); Date today = dateFormat.parse(day); Date tomorrow= DateUtils.addDays(today, 1); String rs = dateFormat.format(tomorrow); System.out.println(rs) 結果:2019年09月01日
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
注意:如果今天的時間寫錯了,比如:2019年8月32日,那么系統會自動將今天的時間變成2019年9月1日,明天的時間則為2019年09月02日
除了添加一天的方法,也有添加一小時,一周的方法等
DateUtils.addYears(); //添加年 DateUtils.addMonths(); //添加月 DateUtils.addWeeks(); //添加周 DateUtils.addDays(); //添加天 DateUtils.addHours(); //添加小時 DateUtils.addMinutes(); //添加分鍾 DateUtils.addSeconds() //添加秒 。。。。。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
日期比較
日期比較也是我們常用到的時間處理方式,比較兩個日期是否是同一天,那么可能需要先比較年,再比較月,最后比較日,整個代碼比較繁瑣,使用DateUtils工具類也是只需要一行代碼就能解決。
//判斷兩個日期是否相同 boolean sameDay = DateUtils.isSameDay(date2, date1);
- 1
- 2
其他
DateUtils工具類還提供了將日期Date轉換成日歷的方法
Calendar calendar = DateUtils.toCalendar(date);
- 1
CollectionUtils
CollectionUtils工具類是對集合的一些操作。可能我們平常最多用到的方法是判斷集合是否為空
//CollectionUtils不僅可以判斷Collection的子集合,也能判斷Map是否為空 boolean empty = CollectionUtils.isEmpty(list);
- 1
- 2
判斷兩個集合是否有相同的元素
//判斷兩個集合如果有相同的元素返回true,反之返回false boolean b = CollectionUtils.containsAny(list, list2);
- 1
- 2
將數組轉換成list集合
//平常在代碼中將數組轉換成list可能常用的java.util包 Arrays.asList() List<String> list = Arrays.asList(arr); //CollectionUtils工具類也提供了將訴數組轉換成list,返回的list是沒有泛型的 List list = CollectionUtils.arrayToList(arr);
- 1
- 2
- 3
- 4
- 5
獲取集合list 或者 set 的最后一個元素
//我們如果想要獲取list的最后一個元素的話可以使用下標,因為list的有序的 String last = list.get(list.size() - 1); //但是如果要獲取set集合的最后一個元素就比較麻煩,set的無序的沒有下標,但是可以使用CollectionUtils工具類 String last = CollectionUtils.lastElement(set);
- 1
- 2
- 3
- 4
FileUtils
FileUtils工具類從名稱也能看出來是對文件的一些操作。
拷貝文件或目錄
復制文件或者文件夾,使用常規的方法,就會先從某個文件目錄中讀取文件或者文件夾,然后再寫出到另外一個文件目錄中,但是如果使用工具FileUtils就可以跟方便的實現,如下:
//將文件夾original中的文件全部拷貝到文件夾objective File srcDir = new File("G:\\original"); File destDir = new File("G:\\objective"); try { FileUtils.copyDirectory(srcDir,destDir); } catch (IOException e) { e.printStackTrace(); } //拷貝文件 File srcFile = new File("G:\\original\\src\\test.txt"); File destFile = new File("G:\\objective\\desc\\copy.txt"); try { FileUtils.copyFile(srcFile,destFile); } catch (IOException e) { e.printStackTrace(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
上面的方法是將某個目錄下的文件拷貝到另外的目錄下,或者將某個文件拷貝到另外一個文件中,下面還有其他拷貝方法
//本方法是將目錄original,整體拷貝到目錄objective中,即在目錄objective下面有個子目錄original File srcDir = new File("G:\\original"); File destDir = new File("G:\\objective"); try { FileUtils.copyDirectoryToDirectory(srcDir,destDir); } catch (IOException e) { e.printStackTrace(); } //將text.txt文件拷貝到objective目錄下,文件名保持原來的 File srcFile = new File("G:\\original\\src\\test.txt"); File file = new File("G:\\objective"); try { FileUtils.copyFileToDirectory(); } catch (IOException e) { e.printStackTrace(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
刪除文件或目錄
FileUtils提供了刪除文件或目錄的方法,比如要清空某個文件目錄下的所有內容,如下:
//清空目錄objective下的所有內容,但是不刪除objective目錄 File file = new File("G:\\objective"); try { FileUtils.cleanDirectory(new File("G:\\objective")); } catch (IOException e) { e.printStackTrace(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
與cleanDirectory()方法不同的還有一個刪除目錄的方法
//刪除目錄objective以及子目錄子文件,即G盤下沒有了objective目錄 File file = new File("G:\\objective"); try { FileUtils.deleteDirectory(file); } catch (IOException e) { e.printStackTrace(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
讀寫文件
FileUtils工具類中提供了一些讀取文件的方法
//讀取文件返回讀取的內容字符串,另一個重載的方法可以設置編碼 String context = FileUtils.readFileToString(file); String context = FileUtils.readFileToString(file,encoding); //讀取文件返回字節數組 byte[] bytes = FileUtils.readFileToByteArray(file); //讀取文件返回流 FileInputStream fileInputStream = FileUtils.openInputStream(file); FileOutputStream fileOutputStream = FileUtils.openOutputStream(file); //既然有讀取文件內容的方法那么必然也有寫的方法 FileUtils.writeStringToFile(file,data); FileUtils.writeStringToFile(file,data,encoding);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
IOUtils
IOUtils是對流的操作,我們常常操作文件的時候就使用io流,所以上面FileUtils提到的文件復制也可以使用IOUtils實現,只是IOUtils是對文件流進行操作。
//IOUtils有多個重載的copy()方法,返回復制的字節數,示例如下: File srcFile = new File("G:\\original\\src\\test - 副本.txt"); File destFile = new File("G:\\objective\\desc\\copy.txt"); try { FileInputStream fileInputStream = FileUtils.openInputStream(srcFile); FileOutputStream fileOutputStream = FileUtils.openOutputStream(destFile); int copy = IOUtils.copy(fileInputStream, fileOutputStream); System.out.println(copy); } catch (IOException e) { e.printStackTrace(); } //copy方法 copy(InputStream input, OutputStream output) copy(InputStream input, Writer output) copy(InputStream input, Writer output, String encoding) copy(Reader input, Writer output) copy(Reader input, OutputStream output) copy(Reader input, OutputStream output, String encoding)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
IOUtils還提供了兩個重載的方法,用於判斷兩個流的內容是否相同,比如讀取兩個文件返回了流,那么想要判斷兩個文件的內容是否相同,那么可以使用IOUtils提供的方法
FileInputStream fileInputStream1 = FileUtils.openInputStream(destFile); FileInputStream fileInputStream2 = FileUtils.openInputStream(destFile1); boolean b = IOUtils.contentEquals(fileInputStream1, fileInputStream); System.out.println(b); //重載的方法 contentEquals(Reader input1, Reader input2)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
HttpClient
HttpClient是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,並且它支持 HTTP 協議最新的版本和建議。實現了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)。以下是一個簡單的Http請求使用GET方法
//客戶端 public static void main(String[] args) { //創建httpClient實例 HttpClient httpClient = new HttpClient(); //創建一個GET方法 GetMethod getMethod = new GetMethod("http://ip:port/MySpringBootDemo/api/test"); try { //發起get請求 int code = httpClient.executeMethod(getMethod); if (code != HttpStatus.SC_OK){ System.out.println("請求異常"); } byte[] responseBody = getMethod.getResponseBody(); System.out.println(new String(responseBody,"utf-8")); } catch (IOException e) { e.printStackTrace(); }finally { //釋放連接 getMethod.releaseConnection(); } } ............................................................................................................ //服務端 @RestController @RequestMapping("/api") public class ConfigurationApplication { @RequestMapping("test") @ResponseBody public void getNpws(HttpServletResponse response){ File file = new File("G:\\objective\\desc\\copy.txt"); getFile(response,file); } private void getFile(HttpServletResponse response,File file) { try( OutputStream output = response.getOutputStream(