1. 程式人生 > >Apache Commons 工具類介紹及使用

Apache Commons 工具類介紹及使用

Apache Commons包含了很多開源的工具,用於解決平時程式設計經常會遇到的問題,減少重複勞動。

元件 功能介紹
BeanUtils 提供了對於JavaBean進行各種操作,克隆物件,屬性等等.
Betwixt XML與Java物件之間相互轉換.
Codec 處理常用的編碼方法的工具類包 例如DES、SHA1、MD5、Base64等.
Collections java集合框架操作.
Compress java提供檔案打包 壓縮類庫.
Configuration 一個java應用程式的配置管理類庫.
DBCP 提供資料庫連線池服務.
DbUtils 提供對jdbc 的操作封裝來簡化資料查詢和記錄讀取操作.
Email java傳送郵件 對javamail的封裝.
FileUpload 提供檔案上傳功能.
HttpClient 提供HTTP客戶端與伺服器的各種通訊操作. 現在已改成HttpComponents
IO io工具的封裝.
Lang Java基本物件方法的工具類包 如:StringUtils,ArrayUtils等等.
Logging 提供的是一個Java 的日誌介面.
Validator 提供了客戶端和伺服器端的資料驗證框架.

1、 BeanUtils
提供了對於JavaBean進行各種操作, 比如物件,屬性複製等等。

    //1、 克隆物件  
    //  新建立一個普通Java Bean,用來作為被克隆的物件  

        public class Person {  
            private String name = "";  
            private String email = "";  

            private int age;  
            //省略 set,get方法  
        }  

    //  再建立一個Test類,其中在main方法中程式碼如下:  
        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 {  

        /** 

        * @param args 

        */  
        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();  

        }  

        }  

        }  

    //  原理也是通過Java的反射機制來做的。  
    //  2、 將一個Map物件轉化為一個Bean  
    //  這個Map物件的key必須與Bean的屬性相對應。  
        Map map = new HashMap();  
        map.put("name","tom");  
        map.put("email","[email protected]");  
        map.put("age","21");  
        //將map轉化為一個Person物件  
        Person person = new Person();  
        BeanUtils.populate(person,map);  
    //  通過上面的一行程式碼,此時person的屬性就已經具有了上面所賦的值了。  
    //  將一個Bean轉化為一個Map物件了,如下:  
        Map map = BeanUtils.describe(person)  

2 、 Betwixt
XML與Java物件之間相互轉換。

    //1、 將JavaBean轉為XML內容  
        // 新建立一個Person類  
        public class Person{  
            private String name;  
            private int age;  
            /** Need to allow bean to be created via reflection */  
            public PersonBean() {  
            }  
            public PersonBean(String name, int age) {  
                this.name = name;  
                this.age = age;  
            }  
            //省略set, get方法  
            public String toString() {  
                return "PersonBean[name='" + name + "',age='" + age + "']";  
            }  
        }  

        //再建立一個WriteApp類:  
        import java.io.StringWriter;  
        import org.apache.commons.betwixt.io.BeanWriter;  
        public class WriteApp {  
        /** 
        * 建立一個例子Bean,並將它轉化為XML. 
        */  
        public static final void main(String [] args) throws Exception {  
            // 先建立一個StringWriter,我們將把它寫入為一個字串         
            StringWriter outputWriter = new StringWriter();  
            // Betwixt在這裡僅僅是將Bean寫入為一個片斷  
            // 所以如果要想完整的XML內容,我們應該寫入頭格式  
            outputWriter.write(“<?xml version=’1.0′ encoding=’UTF-8′ ?>\n”);  
            // 建立一個BeanWriter,其將寫入到我們預備的stream中  
            BeanWriter beanWriter = new BeanWriter(outputWriter);  
            // 配置betwixt  
            // 更多詳情請參考java docs 或最新的文件  
            beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  
            beanWriter.getBindingConfiguration().setMapIDs(false);  
            beanWriter.enablePrettyPrint();  
            // 如果這個地方不傳入XML的根節點名,Betwixt將自己猜測是什麼  
            // 但是讓我們將例子Bean名作為根節點吧  
            beanWriter.write(“person”, new PersonBean(“John Smith”, 21));  
            //輸出結果  
            System.out.println(outputWriter.toString());  
            // Betwixt寫的是片斷而不是一個文件,所以不要自動的關閉掉writers或者streams,  
            //但這裡僅僅是一個例子,不會做更多事情,所以可以關掉  
            outputWriter.close();  
            }  
        }  
    //2、 將XML轉化為JavaBean  
        import java.io.StringReader;  
        import org.apache.commons.betwixt.io.BeanReader;  
        public class ReadApp {  
        public static final void main(String args[]) throws Exception{  
            // 先建立一個XML,由於這裡僅是作為例子,所以我們硬編碼了一段XML內容  
            StringReader xmlReader = new StringReader(  
            "<?xml version=’1.0′ encoding=’UTF-8′ ?> <person><age>25</age><name>James Smith</name></person>");  
            //建立BeanReader  
            BeanReader beanReader  = new BeanReader();  
            //配置reader  
            beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  
            beanReader.getBindingConfiguration().setMapIDs(false);  
            //註冊beans,以便betwixt知道XML將要被轉化為一個什麼Bean  
            beanReader.registerBeanClass("person", PersonBean.class);  
            //現在我們對XML進行解析  
            PersonBean person = (PersonBean) beanReader.parse(xmlReader);  
            //輸出結果  
            System.out.println(person);  
            }  
        }  

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

 //Base64編解碼  
    private static String encodeTest(String str){  
            Base64 base64 = new Base64();  
            try {  
                str = base64.encodeToString(str.getBytes("UTF-8"));  
            } catch (UnsupportedEncodingException e) {  
                e.printStackTrace();  
            }  
                System.out.println("Base64 編碼後:"+str);  
            return str;  
        }  

        private static void decodeTest(String str){  
            Base64 base64 = new Base64();  
            //str = Arrays.toString(Base64.decodeBase64(str));  
            str = new String(Base64.decodeBase64(str));  
            System.out.println("Base64 解碼後:"+str);  
        }  

重點內容
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.collections.set – 實現Set系列介面的一組類
    /** 
            * 得到集合裡按順序存放的key之後的某一Key 
            */  
            OrderedMap map = new LinkedMap();  
            map.put("FIVE", "5");  
            map.put("SIX", "6");  
            map.put("SEVEN", "7");  
            map.firstKey(); // returns "FIVE"  
            map.nextKey("FIVE"); // returns "SIX"  
            map.nextKey("SIX"); // returns "SEVEN"   

            /** 
            * 通過key得到value 
            * 通過value得到key 
            * 將map裡的key和value對調 
            */  

            BidiMap bidi = new TreeBidiMap();  
            bidi.put("SIX", "6");  
            bidi.get("SIX");  // returns "6"  
            bidi.getKey("6");  // returns "SIX"  
            //       bidi.removeValue("6");  // removes the mapping  
            BidiMap inverse = bidi.inverseBidiMap();  // returns a map with keys and values swapped  
            System.out.println(inverse);  

            /** 
             * 得到兩個集合中相同的元素 
             */  
            List<String> list1 = new ArrayList<String>();  
            list1.add("1");  
            list1.add("2");  
            list1.add("3");  
            List<String> list2 = new ArrayList<String>();  
            list2.add("2");  
            list2.add("3");  
            list2.add("5");  
            Collection c = CollectionUtils.retainAll(list1, list2);  
            System.out.println(c);

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

 //建立壓縮物件  
        ZipArchiveEntry entry = new ZipArchiveEntry("CompressTest");  
          //要壓縮的檔案  
          File f=new File("e:\\test.pdf");  
          FileInputStream fis=new FileInputStream(f);  
          //輸出的物件 壓縮的檔案  
          ZipArchiveOutputStream zipOutput=new ZipArchiveOutputStream(new File("e:\\test.zip"));    
          zipOutput.putArchiveEntry(entry);  
          int i=0,j;  
          while((j=fis.read()) != -1)  
          {   
           zipOutput.write(j);  
           i++;  
           System.out.println(i);  
          }  
          zipOutput.closeArchiveEntry();  
          zipOutput.close();  
          fis.close();  

6、Configuration
用來幫助處理配置檔案的,支援很多種儲存方式。
1. Properties files
2. XML documents
3. Property list files (.plist)
4. JNDI
5. JDBC Datasource
6. System properties
7. Applet parameters
8. Servlet parameters

   //舉一個Properties的簡單例子  
    # usergui.properties  
    colors.background = #FFFFFF  
    colors.foreground = #000080  
    window.width = 500  
    window.height = 300  

    PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");  
    config.setProperty("colors.background", "#000000);  
    config.save();  

    config.save("usergui.backup.properties);//save a copy  
    Integer integer = config.getInteger("window.width");  

7、DBCP
(Database Connection Pool)是一個依賴Jakarta commons-pool物件池機制的資料庫連線池,Tomcat的資料來源使用的就是DBCP。

    import javax.sql.DataSource;  
    import java.sql.Connection;  
    import java.sql.Statement;  
    import java.sql.ResultSet;  
    import java.sql.SQLException;  

    import org.apache.commons.pool.ObjectPool;  
    import org.apache.commons.pool.impl.GenericObjectPool;  
    import org.apache.commons.dbcp.ConnectionFactory;  
    import org.apache.commons.dbcp.PoolingDataSource;  
    import org.apache.commons.dbcp.PoolableConnectionFactory;  
    import org.apache.commons.dbcp.DriverManagerConnectionFactory;  
    //官方示例  
    public class PoolingDataSources {  

        public static void main(String[] args) {  
            System.out.println("載入jdbc驅動");  
            try {  
            Class.forName("oracle.jdbc.driver.OracleDriver");  
            } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
            }  
            System.out.println("Done.");  
            //  
            System.out.println("設定資料來源");  
            DataSource dataSource = setupDataSource("jdbc:oracle:thin:@localhost:1521:test");  
            System.out.println("Done.");  

            //  
            Connection conn = null;  
            Statement stmt = null;  
            ResultSet rset = null;  

            try {  
            System.out.println("Creating connection.");  
            conn = dataSource.getConnection();  
            System.out.println("Creating statement.");  
            stmt = conn.createStatement();  
            System.out.println("Executing statement.");  
            rset = stmt.executeQuery("select * from person");  
            System.out.println("Results:");  
            int numcols = rset.getMetaData().getColumnCount();  
            while(rset.next()) {  
            for(int i=0;i<=numcols;i++) {  
            System.out.print("\t" + rset.getString(i));  
            }  
            System.out.println("");  
            }  
            } catch(SQLException e) {  
            e.printStackTrace();  
            } finally {  
            try { if (rset != null) rset.close(); } catch(Exception e) { }  
            try { if (stmt != null) stmt.close(); } catch(Exception e) { }  
            try { if (conn != null) conn.close(); } catch(Exception e) { }  
            }  
            }  

        public static DataSource setupDataSource(String connectURI) {  
            //設定連線地址  
            ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(  
                    connectURI, null);  

            // 建立連線工廠  
            PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(  
                    connectionFactory);  

            //獲取GenericObjectPool 連線的例項  
            ObjectPool connectionPool = new GenericObjectPool(  
                    poolableConnectionFactory);  

            // 建立 PoolingDriver  
            PoolingDataSource dataSource = new PoolingDataSource(connectionPool);  

            return dataSource;  
        }  
    }  

8、DbUtils
Apache組織提供的一個資源JDBC工具類庫,它是對JDBC的簡單封裝,對傳統操作資料庫的類進行二次封裝,可以把結果集轉化成List。,同時也不影響程式的效能。

  • DbUtils類:啟動類
  • ResultSetHandler介面:轉換型別介面
  • MapListHandler類:實現類,把記錄轉化成List
  • BeanListHandler類:實現類,把記錄轉化成List,使記錄為JavaBean型別的物件
  • Query Runner類:執行SQL語句的類
    import org.apache.commons.dbutils.DbUtils;  
    import org.apache.commons.dbutils.QueryRunner;  
    import org.apache.commons.dbutils.handlers.BeanListHandler;  
    import java.sql.Connection;  
    import java.sql.DriverManager;  
    import java.sql.SQLException;  
    import java.util.List;  
    //轉換成list  
    public class BeanLists {  
        public static void main(String[] args) {  
            Connection conn = null;  
            String url = "jdbc:mysql://localhost:3306/ptest";  
            String jdbcDriver = "com.mysql.jdbc.Driver";  
            String user = "root";  
            String password = "ptest";  

            DbUtils.loadDriver(jdbcDriver);  
            try {  
                conn = DriverManager.getConnection(url, user, password);  
                QueryRunner qr = new QueryRunner();  
                List results = (List) qr.query(conn, "select id,name from person", new BeanListHandler(Person.class));  
                for (int i = 0; i < results.size(); i++) {  
                    Person p = (Person) results.get(i);  
                    System.out.println("id:" + p.getId() + ",name:" + p.getName());  
                }  
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally {  
                DbUtils.closeQuietly(conn);  
            }  
        }  
    }  

    public class Person{  
        private Integer id;  
        private String name;  

       //省略set, get方法  
    }  

    import org.apache.commons.dbutils.DbUtils;  
    import org.apache.commons.dbutils.QueryRunner;  
    import org.apache.commons.dbutils.handlers.MapListHandler;  

    import java.sql.Connection;  
    import java.sql.DriverManager;  
    import java.sql.SQLException;  

    import java.util.List;  
    import java.util.Map;  
    //轉換成map  
    public class MapLists {  
        public static void main(String[] args) {  
            Connection conn = null;  
            String url = "jdbc:mysql://localhost:3306/ptest";  
            String jdbcDriver = "com.mysql.jdbc.Driver";  
            String user = "root";  
            String password = "ptest";  

            DbUtils.loadDriver(jdbcDriver);  
            try {  
                conn = DriverManager.getConnection(url, user, password);  
                QueryRunner qr = new QueryRunner();  
                List results = (List) qr.query(conn, "select id,name from person", new MapListHandler());  
                for (int i = 0; i < results.size(); i++) {  
                    Map map = (Map) results.get(i);  
                    System.out.println("id:" + map.get("id") + ",name:" + map.get("name"));  
                }  
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally {  
                DbUtils.closeQuietly(conn);  
            }  
        }  
    }  

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

  //用commons email傳送郵件  
    public static void main(String args[]){  
            Email email = new SimpleEmail();  
            email.setHostName("smtp.googlemail.com");  
            email.setSmtpPort(465);  
            email.setAuthenticator(new DefaultAuthenticator("username", "password"));  
            email.setSSLOnConnect(true);  
            email.setFrom("[email protected]");  
            email.setSubject("TestMail");  
            email.setMsg("This is a test mail ... :-)");  
            email.addTo("[email protected]");  
            email.send();  
        }  

10、FileUpload
java web檔案上傳功能。

  //官方示例:  
    //* 檢查請求是否含有上傳檔案  
        // Check that we have a file upload request  
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);  

        //現在我們得到了items的列表  

        //如果你的應用近於最簡單的情況,上面的處理就夠了。但我們有時候還是需要更多的控制。  
        //下面提供了幾種控制選擇:  
        // Create a factory for disk-based file items  
        DiskFileItemFactory factory = new DiskFileItemFactory();  

        // Set factory constraints  
        factory.setSizeThreshold(yourMaxMemorySize);  
        factory.setRepository(yourTempDirectory);  

        // Create a new file upload handler  
        ServletFileUpload upload = new ServletFileUpload(factory);  

        // 設定最大上傳大小  
        upload.setSizeMax(yourMaxRequestSize);  

        // 解析所有請求  
        List /* FileItem */ items = upload.parseRequest(request);  

        // Create a factory for disk-based file items  
        DiskFileItemFactory factory = new DiskFileItemFactory(  
                yourMaxMemorySize, yourTempDirectory);  

        //一旦解析完成,你需要進一步處理item的列表。  
        // Process the uploaded items  
        Iterator iter = items.iterator();  
        while (iter.hasNext()) {  
            FileItem item = (FileItem) iter.next();  

            if (item.isFormField()) {  
                processFormField(item);  
            } else {  
                processUploadedFile(item);  
            }  
        }  

        //區分資料是否為簡單的表單資料,如果是簡單的資料:  
        // processFormField  
        if (item.isFormField()) {  
            String name = item.getFieldName();  
            String value = item.getString();  
            //...省略步驟  
        }  

        //如果是提交的檔案:  
        // processUploadedFile  
        if (!item.isFormField()) {  
            String fieldName = item.getFieldName();  
            String fileName = item.getName();  
            String contentType = item.getContentType();  
            boolean isInMemory = item.isInMemory();  
            long sizeInBytes = item.getSize();  
            //...省略步驟  
        }  

        //對於這些item,我們通常要把它們寫入檔案,或轉為一個流  
        // Process a file upload  
        if (writeToFile) {  
            File uploadedFile = new File(...);  
            item.write(uploadedFile);  
        } else {  
            InputStream uploadedStream = item.getInputStream();  
            //...省略步驟  
            uploadedStream.close();  
        }  

        //或轉為位元組陣列儲存在記憶體中:  
        // Process a file upload in memory  
        byte[] data = item.get();  
        //...省略步驟  
        //如果這個檔案真的很大,你可能會希望向使用者報告到底傳了多少到服務端,讓使用者瞭解上傳的過程  
        //Create a progress listener  
        ProgressListener progressListener = new ProgressListener(){  
           public void update(long pBytesRead, long pContentLength, int pItems) {  
               System.out.println("We are currently reading item " + pItems);  
               if (pContentLength == -1) {  
                   System.out.println("So far, " + pBytesRead + " bytes have been read.");  
               } else {  
                   System.out.println("So far, " + pBytesRead + " of " + pContentLength  
                                      + " bytes have been read.");  
               }  
           }  
        };  
        upload.setProgressListener(progressListener);  

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

 //GET方法  
    import java.io.IOException;  
    import org.apache.commons.httpclient.*;  
    import org.apache.commons.httpclient.methods.GetMethod;  
    import org.apache.commons.httpclient.params.HttpMethodParams;  

    public class GetSample{  
        public static void main(String[] args) {  
            // 構造HttpClient的例項  
            HttpClient httpClient = new HttpClient();  
            // 建立GET方法的例項  
            GetMethod getMethod = new GetMethod("http://www.ibm.com");  
            // 使用系統提供的預設的恢復策略  
            getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
                    new DefaultHttpMethodRetryHandler());  
            try {  
                // 執行getMethod  
                int statusCode = httpClient.executeMethod(getMethod);  
                if (statusCode != HttpStatus.SC_OK) {  
                    System.err.println("Method failed: "  
                            + getMethod.getStatusLine());  
                }  
                // 讀取內容  
                byte[] responseBody = getMethod.getResponseBody();  
                // 處理內容  
                System.out.println(new String(responseBody));  
            } catch (HttpException e) {  
                // 發生致命的異常,可能是協議不對或者返回的內容有問題  
                System.out.println("Please check your provided http address!");  
                e.printStackTrace();  
            } catch (IOException e) {  
                // 發生網路異常  
                e.printStackTrace();  
            } finally {  
                // 釋放連線  
                getMethod.releaseConnection();  
            }  
        }  
    }  

    //POST方法  
    import java.io.IOException;  
    import org.apache.commons.httpclient.*;  
    import org.apache.commons.httpclient.methods.PostMethod;  
    import org.apache.commons.httpclient.params.HttpMethodParams;  

    public class PostSample{  
        public static void main(String[] args) {  
            // 構造HttpClient的例項  
            HttpClient httpClient = new HttpClient();  
            // 建立POST方法的例項  
            String url = "http://www.oracle.com/";  
            PostMethod postMethod = new PostMethod(url);  
            // 填入各個表單域的值  
            NameValuePair[] data = { new NameValuePair("id", "youUserName"),  
            new NameValuePair("passwd", "yourPwd") };  
            // 將表單的值放入postMethod中  
            postMethod.setRequestBody(data);  
            // 執行postMethod  
            int statusCode = httpClient.executeMethod(postMethod);  
            // HttpClient對於要求接受後繼服務的請求,象POST和PUT等不能自動處理轉發  
            // 301或者302  
            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||   
            statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {  
                // 從頭中取出轉向的地址  
                Header locationHeader = postMethod.getResponseHeader("location");  
                String location = null;  
                if (locationHeader != null) {  
                 location = locationHeader.getValue();  
                 System.out.println("The page was redirected to:" + location);  
                } else {  
                 System.err.println("Location field value is null.");  
                }  
                return;  
            }  
        }  
    }  

12、IO
對java.io的擴充套件 操作檔案非常方便。

    //1.讀取Stream  

    //標準程式碼:  
    InputStream in = new URL( "http://jakarta.apache.org" ).openStream();  
    try {  
           InputStreamReader inR = new InputStreamReader( in );  
           BufferedReader buf = new BufferedReader( inR );  
           String line;  
           while ( ( line = buf.readLine() ) != null ) {  
              System.out.println( line );  
           }  
      } finally {  
        in.close();  
      }  

    //使用IOUtils  

    InputStream in = new URL( "http://jakarta.apache.org" ).openStream();  
    try {  
        System.out.println( IOUtils.toString( in ) );  
    } finally {  
        IOUtils.closeQuietly(in);  
    }  

    //2.讀取檔案  
    File file = new File("/commons/io/project.properties");  
    List lines = FileUtils.readLines(file, "UTF-8");  
    //3.察看剩餘空間  
    long freeSpace = FileSystemUtils.freeSpace("C:/");  

13、Lang
主要是一些公共的工具集合,比如對字元、陣列的操作等等。

    // 1 合併兩個陣列: org.apache.commons.lang. ArrayUtils  
        // 有時我們需要將兩個數組合併為一個數組,用ArrayUtils就非常方便,示例如下:  
        private static void testArr() {  
            String[] s1 = new String[] { "1", "2", "3" };  
            String[] s2 = new String[] { "a", "b", "c" };  
            String[] s = (String[]) ArrayUtils.addAll(s1, s2);  
            for (int i = 0; i < s.length; i++) {  
                System.out.println(s[i]);  
            }  
            String str = ArrayUtils.toString(s);  
            str = str.substring(1, str.length() - 1);  
            System.out.println(str + ">>" + str.length());  

        }  
        //2 擷取從from開始字串  
        StringUtils.substringAfter("SELECT * FROM PERSON ", "from");  
        //3 判斷該字串是不是為數字(0~9)組成,如果是,返回true 但該方法不識別有小數點和 請注意。  
        StringUtils.isNumeric("454534"); //返回true  
        //4.取得類名  
           System.out.println(ClassUtils.getShortClassName(Test.class));  
           //取得其包名  
           System.out.println(ClassUtils.getPackageName(Test.class));  

           //5.NumberUtils  
           System.out.println(NumberUtils.stringToInt("6"));  
           //6.五位的隨機字母和數字  
           System.out.println(RandomStringUtils.randomAlphanumeric(5));  
           //7.StringEscapeUtils  
           System.out.println(StringEscapeUtils.escapeHtml("<html>"));  
           //輸出結果為&lt;html&gt;  
           System.out.println(StringEscapeUtils.escapeJava("String"));  

           //8.StringUtils,判斷是否是空格字元  
           System.out.println(StringUtils.isBlank("   "));  
           //將陣列中的內容以,分隔  
           System.out.println(StringUtils.join(test,","));  
           //在右邊加下字元,使之總長度為6  
           System.out.println(StringUtils.rightPad("abc", 6, 'T'));  
           //首字母大寫  
           System.out.println(StringUtils.capitalize("abc"));  
           //Deletes all whitespaces from a String 刪除所有空格  
           System.out.println( StringUtils.deleteWhitespace("   ab  c  "));  
           //判斷是否包含這個字元  
           System.out.println( StringUtils.contains("abc", "ba"));  
           //表示左邊兩個字元  
           System.out.println( StringUtils.left("abc", 2));  
           System.out.println(NumberUtils.stringToInt("33"));

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
通用驗證系統,該元件提供了客戶端和伺服器端的資料驗證框架。
驗證日期

    // 獲取日期驗證  
          DateValidator validator = DateValidator.getInstance();  

          // 驗證/轉換日期  
          Date fooDate = validator.validate(fooString, "dd/MM/yyyy");  
          if (fooDate == null) {  
              // 錯誤 不是日期  
              return;  
          }  

表示式驗證

    // 設定引數  
          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  
          boolean valid = validator.isValid("abc-def");  

          // 驗證返回字串  
          String result = validator.validate("abc-def");  

          // 驗證返回陣列  
          String[] groups = validator.match("abc-def");  

配置檔案中使用驗證

    <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=
            
           

相關推薦

Apache Commons 工具介紹使用

Apache Commons包含了很多開源的工具,用於解決平時程式設計經常會遇到的問題,減少重複勞動。 元件 功能介紹 BeanUtils 提供了對於JavaBean進行各種操作,

Apache Commons 工具介紹

//官方示例 public class PoolingDataSources { public static void main(String[] args) { System.out.println("載入jdbc驅動");

展示C代碼覆蓋率的gcovr工具簡單介紹相關命令使用演示樣例

文件夾 mes repo 例如 oid else if dir total down (本人正在參加2015博客之星評選,誠邀你來投票,謝謝:username=zhouzxi">http://vote.blog.csdn.net/blogstar2015

Linux系統壓縮工具介紹用法

linux 心得 學習 gzip bzip2 xz 6.1 壓縮打包介紹6.2 gzip壓縮工具6.3 bzip2壓縮工具6.4 xz壓縮工具本文出自 “桃源遊記” 博客,請務必保留此出處http://3622288.blog.51cto.com/9153892/1980321Linu

zip、tar工具介紹用法

centos 7 zip tar 6.5 zip壓縮工具6.6 tar打包6.7 打包並壓縮6.5 zip壓縮工具直接壓縮 格式 zip 1.txt.zip 1.txt //可以看到zip需要先命名文件[root@centos7 tmp]# ls -lh 1.txt 查看文件大小 -rw-r

Java中BigDecimal介紹用法

exceptio decimal body ue4 mage oat 比較運算符 mod 乘法   Java中提供了大數字(超過16位有效位)的操作類,即 java.math.BinInteger 類和 java.math.BigDecimal 類,用於高精度計算.   其

【IO流】31 - commons工具----FilenameUtils和FileUtils

tostring date cas 獲取 copy 文件 判斷 filename mon FilenameUtils package cn.itcast.demo3; import org.apache.commons.io.FilenameUtils; pub

BeanUtil工具簡介應用

概述 BeanUtils工具是Apache Commons元件的成員之一,主要用於簡化JavaBean封裝資料的操作。 使用的好處:BeanUtils給物件封裝引數的時候會進行型別自動轉換。 Apache Common BeanUtil是一個常用的在物件之間複製資料

JsonUtil工具簡介應用

 專案中經常會有String轉Object以及Object轉Json字串的等其他的轉化需求,合理的使用Json工具類會很方便轉換。 JsonUtil.java應用 —— toList Map dataMap = returnResul

File相關工具簡介應用

 查找出目錄下的檔案,並設定過濾規則 public class FileTest{ public void test() throws ParseException { // 查出路徑下的目錄 File directory =

Apache Commons工具集簡介

轉自:http://zhoualine.iteye.com/blog/1770014         Apache Commons包含了很多開源的工具,用於解決平時程式設計經常會遇到的問題,減少重複勞動。下面是我這幾年做開發過程中自己用過的工具類做簡單介紹。 元件 功能介紹 BeanUtils 提供了對於

Apache HttpComponents 工具 [ HttpUtil ]

efault input socket lin bean 不存在 empty pub 上下文 pom.xml &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&

Python虛擬環境工具-Virtualenv 介紹部署記錄

動態語言Ruby、Python都有自己的虛擬環境,虛擬環境是程式執行時的獨立執行環境,在同一臺伺服器中可以建立不同的虛擬環境供不同的系統使用,專案之間的執行環境保持獨立性而相互不受影響。例如專案A在基於Python2的環境中執行,而專案B可以在基於Python3的環境中執行。Python通virtualenv

apache commons 工具

常用校驗器(靜態方法),包括:字串是否為空或者為 null ,字串是否為 byte 。是否為信用卡,是否為日期(根據模板),是否為浮點數,是否為電郵,是否為雙精數,是否在數值範圍(型別:浮點,雙精,整,長整,端整,位元組),是否為 URL ,是否符合正則表示式,字串是否超長,數值是否超過指定值,字串是否過短,

Apache POI 工具 [ PoiUtil ]

pom.xml &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi-ooxml&lt;/art

黃聰:C#類似Jquery的html解析HtmlAgilityPack基礎介紹運用

Html Agility Pack 原始碼中的類大概有28個左右,其實不算一個很複雜的類庫,但它的功能確不弱,為解析DOM已經提供了足夠強大的功能支援,可以跟jQuery操作DOM媲美:) 基礎類和基礎方法介紹 Html Agility Pack最常用的基礎類其實不多,對解析DOM來說,就只有

Apache Commons工具使用

1. 簡介 Apache Commons包含了很多開源的工具,用於解決平時程式設計經常會遇到的問題,減少重複勞動。 2. Commons-Lang 1) 重寫Object中的方法 一個合格的類應該重寫toString,hashCode,equal

java-io-commons工具

commons-io工具類介紹     * A: commons-io工具類介紹         * a: 工具類介紹             * 解壓縮commons-io-2.4.zip檔案             * commons-io-2.4.jar需要匯入到專案中

Windows 10數字權利獲取工具HWIDGEN介紹使用說明

日前在國外科技論壇有大神釋出名為HWIDGEN啟用工具,該啟用工具幾乎秒殺所有版本Windows 10系統。 我們知道Windows 10現在啟用後會帶有數字權利,數字權利可以在我們重灌系統後自動啟用無需再次啟用。 而HWIDGEN啟用工具正是直接獲取數字啟

Html Agility Pack基礎介紹運用

Html Agility Pack 原始碼中的類大概有28個左右,其實不算一個很複雜的類庫,但它的功能確不弱,為解析DOM已經提供了足夠強大的功能支援,可以跟jQuery操作DOM媲美:) 基礎類和基礎方法介紹 Html Agility Pack最常用的基礎類其實不多,對解析DOM來說,就只有HtmlDoc