全面的Java開源Apache Commons 工具類介紹

2021-02-13 Java雜記

前言

Apache Commons 工具類大家都有用過,但是可能缺乏系統學習,只用到了一小部分功能,無法發揮極限的價值,大白話說就是,一顆好白菜都讓豬給拱了!

代碼過多,手機觀看效果不佳,建議收藏後在電腦上靜悄悄地看。因內容健康,可大膽轉發,即使未滿十八歲,在沒有家長陪同下也一樣可以觀看!

1、BeanUtils

提供了對於JavaBean進行各種操作, 比如對象,屬性複製等等。

 

 

 public class Person {  

 private String name = "";  

 private String email = "";  

 private int age;  

  

 }  

 

 import java.lang.reflect.InvocationTargetException;  

 import java.util.HashMap;  

 import java.util.Map;  

 import org.apache.commons.beanutils.BeanUtils;  

 import org.apache.commons.beanutils.ConvertUtils;  

 public class Test {  

  

 

  

 public static void main(String[] args) {  

 Person person = new Person();  

 person.setName("tom");  

 person.setAge(21);  

 try {  

  

 Person person2 = (Person)BeanUtils.cloneBean(person);  

 System.out.println(person2.getName()+">>"+person2.getAge());  

 } catch (IllegalAccessException e) {  

 e.printStackTrace();  

 } catch (InstantiationException e) {  

 e.printStackTrace();  

 } catch (InvocationTargetException e) {  

 e.printStackTrace();  

 } catch (NoSuchMethodException e) {  

 e.printStackTrace();  

 }  

 }  

 }  

 

 

 

 Map map = new HashMap();  

 map.put("name","tom");  

 map.put("email","tom@");  

 map.put("age","21");  

  

 Person person = new Person();  

 BeanUtils.populate(person,map);  

 

 

 Map map = BeanUtils.describe(person) 

2.Betwixt

XML與Java對象之間相互轉換。

 

 

public class Person{  

 private String name;  

 private int age;  

   

 public PersonBean() {  

 }  

 public PersonBean(String name, int age) {  

 this.name = name;  

 this.age = age;  

 }  

  

 public String toString() {  

 return "PersonBean[name='" + name + "',age='" + age + "']";  

 }  

}  

 

import java.io.StringWriter;  

import org.apache.commons.betwixt.io.BeanWriter;  

public class WriteApp {  

 

 

  

public static final void main(String [] args) throws Exception {  

  

 StringWriter outputWriter = new StringWriter();  

  

  

 outputWriter.write(「<?xml version=』1.0′ encoding=』UTF-8′ ?> 

」);  

  

 BeanWriter beanWriter = new BeanWriter(outputWriter);  

  

  

 beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  

 beanWriter.getBindingConfiguration().setMapIDs(false);  

 beanWriter.enablePrettyPrint();  

  

  

 beanWriter.write(「person」, new PersonBean(「John Smith」, 21));  

  

 System.out.println(outputWriter.toString());  

  

  

 outputWriter.close();  

 }  

}  

 

import java.io.StringReader;  

import org.apache.commons.betwixt.io.BeanReader;  

public class ReadApp {  

public static final void main(String args[]) throws Exception{  

  

 StringReader xmlReader = new StringReader(  

 "<?xml version=』1.0′ encoding=』UTF-8′ ?> <person><age>25</age><name>James Smith</name></person>");  

  

 BeanReader beanReader = new BeanReader();  

  

 beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  

 beanReader.getBindingConfiguration().setMapIDs(false);  

  

 beanReader.registerBeanClass("person", PersonBean.class);  

  

 PersonBean person = (PersonBean) beanReader.parse(xmlReader);  

  

 System.out.println(person);  

 }  

為什麼某些人會一直比你優秀,是因為他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜! 關注我,私信回復我「資料」

獲取免費的Java架構學習資料(裡面有高可用、高並發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構視頻學習資料以及電子書資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間「來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

3.Codec

提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等

4.Collections

對java.util的擴展封裝,處理數據還是挺靈活的。

org.apache.commons.collections – Commons Collections自定義的一組公用的接口和工具類

org.apache.commons.collections.bag – 實現Bag接口的一組類

org.apache.commons.collections.bidimap – 實現BidiMap系列接口的一組類

org.apache.commons.collections.buffer – 實現Buffer接口的一組類

org.apache.commons.collections.collection – 實現java.util.Collection接口的一組類

org.apache.commons.collections.comparators – 實現java.util.Comparator接口的一組類

org.apache.commons.collections.functors – Commons Collections自定義的一組功能類

org.apache.commons.collections.iterators – 實現java.util.Iterator接口的一組類

org.apache.commons.collections.keyvalue – 實現集合和鍵/值映射相關的一組類

org.apache.commons.collections.list – 實現java.util.List接口的一組類

org.apache.commons.collections.map – 實現Map系列接口的一組類

org.apache.commons.collections5.Compress.set – 實現Set系列接口的一組類

5.Compress

commons compress中的打包、壓縮類庫。

6.Configuration

用來幫助處理配置文件的,支持很多種存儲方式。

Properties filesXML documentsProperty list files (.plist)JNDIJDBC DatasourceSystem propertiesApplet parametersServlet parameters

7.DBCP

(Database Connection Pool)是一個依賴Jakarta commons-pool對象池機制的資料庫連接池,Tomcat的數據源使用的就是DBCP。

8.DbUtils

Apache組織提供的一個資源JDBC工具類庫,它是對JDBC的簡單封裝,對傳統操作資料庫的類進行二次封裝,可以把結果集轉化成List。,同時也不影響程序的性能。文章轉自肥朝大神

DbUtils類:啟動類

ResultSetHandler接口:轉換類型接口

MapListHandler類:實現類,把記錄轉化成List

BeanListHandler類:實現類,把記錄轉化成List,使記錄為JavaBean類型的對象

Qrery Runner類:執行SQL語句的類

9.Email

提供的一個開源的API,是對javamail的封裝。

10.FileUpload

java web文件上傳功能。

11.HttpClient

基於HttpCore實 現的一個HTTP/1.1兼容的HTTP客戶端,它提供了一系列可重用的客戶端身份驗證、HTTP狀態保持、HTTP連接管理module。

12.http://IO

對http://java.io的擴展 操作文件非常方便。

13.Lang

主要是一些公共的工具集合,比如對字符、數組的操作等等。

14.Logging

提供的是一個Java 的日誌接口,同時兼顧輕量級和不依賴於具體的日誌實現工具。

import org.apache.commons.logging.Log;  

import org.apache.commons.logging.LogFactory;  

public class CommonLogTest {  

 private static Log log = LogFactory.getLog(CommonLogTest.class);  

  

 public static void main(String[] args) {  

 log.error("ERROR");  

 log.debug("DEBUG");  

 log.warn("WARN");  

 log.info("INFO");  

 log.trace("TRACE");  

 System.out.println(log.getClass());  

 }  

15.Validator

通用驗證系統,該組件提供了客戶端和伺服器端的數據驗證框架。

1.驗證日期

 

DateValidator validator = DateValidator.getInstance();  

 

Date fooDate = validator.validate(fooString, "dd/MM/yyyy");  

if (fooDate == null) {  

  

 return;  

2.表達式驗證

 

boolean caseSensitive = false;  

String regex1 = "^([A-Z]*)(?:\-)([A-Z]*)*$"  

String regex2 = "^([A-Z]*)$";  

String[] regexs = new String[] {regex1, regex1};  

 

RegexValidator validator = new RegexValidator(regexs, caseSensitive);  

 

boolean valid = validator.isValid("abc-def");  

 

String result = validator.validate("abc-def");  

 

String[] groups = validator.match("abc-def"); 

3.配置文件中使用驗證

<form-validation>  

 <global>  

 <validator name="required"  

 classname="org.apache.commons.validator.TestValidator"  

 method="validateRequired"  

 methodParams="java.lang.Object, org.apache.commons.validator.Field"/>  

 </global>  

 <formset>  

 </formset>  

</form-validation>  

添加姓名驗證.  

<form-validation>  

 <global>  

 <validator name="required"  

 classname="org.apache.commons.validator.TestValidator"  

 method="validateRequired"  

 methodParams="java.lang.Object, org.apache.commons.validator.Field"/>  

 </global>  

 <formset>  

 <form name="nameForm">  

 <field property="firstName" depends="required">  

 <arg0 key="nameForm.firstname.displayname"/>  

 </field>  

 <field property="lastName" depends="required">  

 <arg0 key="nameForm.lastname.displayname"/>  

 </field>  

 </form>  

 </formset>  

</form-validation> 

4.驗證類

Excerpts from org.apache.commons.validator.RequiredNameTest  

 

InputStream in = this.getClass().getResourceAsStream("validator-name-required.xml");  

ValidatorResources resources = new ValidatorResources(in);  

 

Name name = new Name();  

Validator validator = new Validator(resources, "nameForm");  

 

validator.setParameter(Validator.BEAN_PARAM, name);  

Map results = null;  

 

results = validator.validate();  

if (results.get("firstName") == null) {  

  

} else {  

  

相關焦點

  • Apache Commons 工具類介紹及簡單使用
    org.apache.commons.collections – Commons Collections自定義的一組公用的接口和工具類org.apache.commons.collections.bag – 實現Bag接口的一組類org.apache.commons.collections.bidimap – 實現BidiMap系列接口的一組類
  • Apache Commons 工具集使用簡介
    Apache Commons包含了很多開源的工具,用於解決平時編程經常會遇到的問題,減少重複勞動。我選了一些比較常用的項目做簡單介紹。
  • Apache-commons 常用工具類
    前言見過大多數公司都有封裝自己的工具類,很多已經有人實現了方法又重新實現一遍,不僅代碼質量得不到保證,而且性能,並發都會有問題;反正我一般不用公司封裝的工具類,像 apache.commons ,springutil 中都已經有很多現成的工具可以使用了,沒必要重複造輪子;本文章主要是說一下有哪些比較常用的工具可以使用,不一定全面,大神勿踩。
  • Apache Commons IO 入門教程
    1.1 Utility Classesorg.apache.commons.io包中有很多工具類,裡面多數類都是完成文件操作以及字符串比較的功能,下面列舉了一下常用的工具類: FilenameUtils: 這個工具類是用來處理文件名(譯者註:包含文件路徑)的,他可以輕鬆解決不同作業系統文件名稱規範不同的問題(比如windows和Unix)
  • 由Apache Commons Collections漏洞引發的思考
    可以說很多公司開放的rpc,只要協議裡支持Java序列化方式,classpath裡有apache commons collections的jar包,都存在被遠程代碼執行的風險。至於能不能通過http接口再調用dubbo rpc遠程代碼,貌似不太可行。因為信息難以傳遞。
  • 由 Apache Commons Collections 漏洞引發的思考
    commons collections 3.2.2修復漏洞新版本的apache commons collections默認禁止了不安全的一些轉換類。參考release說明:https://commons.apache.org/proper/commons-collections/release_3_2_2.htmlDubbo rpc遠程代碼執行的例子重新思考了下這個漏洞,給出一個dubbo rpc遠程代碼執行的例子。
  • 排名前16的Java工具類,哪個你沒用過?
    /在Java中,實用程序類是定義一組執行通用功能的方法的類。這篇文章展示了最常用的Java實用工具類及其最常用的方法。類列表及其方法列表均按受歡迎程度排序。數據基於從GitHub隨機選擇的50,000個開源Java項目。
  • Apache Commons Collections反序列化漏洞分析與復現
    POC核心代碼:package com.patrilic.vul;import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ConstantTransformer;import org.apache.commons.collections.functors.InvokerTransformer
  • 16 個超級實用的 Java 工具類
    出處:alteremjuejin.im/post/5d4a25b351882505c105cc6e在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源於Github上隨機選取的5萬個開源項目源碼。
  • 乾貨:排名前16的Java工具類
    在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源於Github上隨機選取的5萬個開源項目源碼。1. org.apache.commons.io.IOUtilscloseQuietly:關閉一個IO流、socket、或者selector且不拋出異常,通常放在finally塊toString:轉換IO流、 Uri、
  • 排名前 16 的 Java 工具類,哪個你沒用過?
    在Java中,實用程序類是定義一組執行通用功能的方法的類。
  • 排名前 16 的 Java 工具類,你都用過哪些?
    今天,磊哥,跟大家分享一下,在Java中,Java 工具類是定義一組執行通用功能的方法的類。這篇文章展示了最常用的Java 工具類及其最常用的方法。類列表及其方法列表均按受歡迎程度排序。數據基於從GitHub隨機選擇的50,000個開源Java項目。希望您可以通過瀏覽列表來了解已經提供和流行的功能的一些想法,以使您知道不需要自己實現。
  • 常用Java開源Library
    Java日文分詞器之Kuromoji Kuromoji是一個開源的,基於java語言開發的輕量級的日文分詞工具包。捐贈給了ASF之後被內置在Lucene 和 Solr中,作為默認的日文分詞器(默認的中文分詞器是smartcn)。但他也不依賴Lucene 或 Solr,可以單獨使用。
  • Java Base64工具類,提供常用(文件、圖片、PDF、URL)轉換方法
    一、所需的包注意:java.util.Base64是JDK1.8中新增的類,所以它只支持JDK1.8及以後的版本,如果你的JDK版本低於1.8,請使用org.apache.commons.codec.binary.Base64.下面的包,是用於Base64的pdf轉img使用的,如果不需要要,可以不引用,並刪掉對應的方法(前言中的5和6)。
  • 16個Java實用程序類,你用過幾個?
    16個Java實用程序類在Java中,實用程序類是定義一組執行通用功能的方法的類。
  • Java各類日誌組件分析匯總
    本文將和大家介紹一下 Java 主流的日誌工具,以及相對應的使用場景。在java的世界裡有許多實現日誌功能的工具,最早得到廣泛使用的是 log4j,現在比較流行的是slf4j+logback。作為開發人員,我們有時候需要封裝一些組件(二方包)提供給其他人員使用,但是那麼多的日誌工具,根本沒法保證每個組件裡都能使用約定好的日誌工具,況且還有很多第三方的包,鬼知道他會用什麼日誌工具。
  • 細說 Java 主流日誌工具庫
    在 Java 世界,有很多的日誌工具庫來實現日誌功能,避免了我們重複造輪子。我們先來逐一了解一下主流日誌工具。日誌框架java.util.logging (JUL)JDK1.4 開始,通過 java.util.logging 提供日誌功能。
  • javaWeb中,如何通過Commons-FileUpload組件上傳文件
    比如在QQ空間中我們上傳的照片,在博客中我們上傳的工具插件,均離不開文件上傳,那麼,今天我們就來看看,javaweb中,是如何實現文件上傳的?在JSP文件中使用 page指令導入Cormons Filel ploaod組件所需的類。判斷請求信息中的內容是否是multipart 類型,如果是則進行處理。
  • 在 Java 中使用外部庫 | Linux 中國
    例如,Apache Commons🔗 commons.apache.org「是一個專注於可重用 Java 組件所有方面的 Apache 項目」,提供了大約 43 個開源庫的集合(截至撰寫本文時),涵蓋了 Java 核心庫之外的一系列功能 (例如 geometry🔗 commons.apache.org 或 statistics🔗 commons.apache.org),並增強或替換了 Java
  • Java反序列化漏洞技術分析
    類ObjectInputStream和ObjectOutputStream是高層次的數據流,它們包含序列化和反序列化對象的方法 首先定義一個Person類,該類實現了Serializable接口。