设为首页 收藏本站
查看: 763|回复: 0

[经验分享] Apache Commons 工具类介绍及简单使用

[复制链接]

尚未签到

发表于 2015-7-31 12:26:27 | 显示全部楼层 |阅读模式
    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类做简单介绍。
  
组件功能介绍
BeanUtils提供了对于JavaBean进行各种操作,克隆对象,属性等等.
BetwixtXML与Java对象之间相互转换.
Codec处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等.
Collectionsjava集合框架操作.
Compressjava提供文件打包 压缩类库.
Configuration一个java应用程序的配置管理类库.
DBCP提供数据库连接池服务.
DbUtils提供对jdbc 的操作封装来简化数据查询和记录读取操作.
Emailjava发送邮件 对javamail的封装.
FileUpload提供文件上传功能.
HttpClien提供HTTP客户端与服务器的各种通讯操作. 现在已改成HttpComponents
IOio工具的封装.
LangJava基本对象方法的工具类包 如:StringUtils,ArrayUtils等等.
Logging提供的是一个Java 的日志接口.
Validator提供了客户端和服务器端的数据验证框架.
1、BeanUtils
  提供了对于JavaBean进行各种操作, 比如对象,属性复制等等。
  



Java代码   DSC0000.png

  • //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","tom@");  
  •     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对象之间相互转换。
  



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(“\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(  
  •         " 25James Smith");  
  •         //创建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等等。
  



Java代码  

  • //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系列接口的一组类



Java代码  

  • /**
  •         * 得到集合里按顺序存放的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 list1 = new ArrayList();  
  •         list1.add("1");  
  •         list1.add("2");  
  •         list1.add("3");  
  •         List list2 = new ArrayList();  
  •         list2.add("2");  
  •         list2.add("3");  
  •         list2.add("5");  
  •         Collection c = CollectionUtils.retainAll(list1, list2);  
  •         System.out.println(c);  
  
5、Compress
  commons compress中的打包、压缩类库。
  



Java代码  

  • //创建压缩对象  
  •     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



Java代码  

  • //举一个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。



Java代码  

  • 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92736-1-1.html 上篇帖子: Apache Spark-1.0.1集群搭建 下篇帖子: 让apache只允许域名访问而禁止IP实现方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表