史上最全面的Java开源Apache Commons 工具类介绍

前言

Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,大白话说就是,一颗好白菜都让猪给拱了!

代码过多,手机观看效果不佳,建议收藏后在电脑上静悄悄地看。因内容健康,可大胆转发,即使未满十八岁,在没有家长陪同下也一样可以观看!

欢迎热爱Java的小伙伴们,加入我们,关注+点赞,加Q群:514683544即可获取小编提供的免费学习资料,有高可用、高并发、高性能及分布式、Jvm性能调优、Spring,MyBatis,Netty源码分析,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点和BAT面试题目以及技巧

Java和操作系统交互细节

Java和操作系统交互细节

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","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对象之间相互转换。

//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′ ?>
”); 
 // 创建一个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); 
 } 
}

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜! 关注我,私信回复我“资料”

获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构视频学习资料以及电子书资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

 

3.Codec

提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic and URLs等等

史上最全面的Java开源Apache Commons 工具类介绍

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

史上最全面的Java开源Apache Commons 工具类介绍

5.Compress

commons compress中的打包、压缩类库。

史上最全面的Java开源Apache Commons 工具类介绍

6.Configuration

用来帮助处理配置文件的,支持很多种存储方式。

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

史上最全面的Java开源Apache Commons 工具类介绍

7.DBCP

(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。

史上最全面的Java开源Apache Commons 工具类介绍

8.DbUtils

  • Apache组织提供的一个资源JDBC工具类库,它是对JDBC的简单封装,对传统操作数据库的类进行二次封装,可以把结果集转化成List。,同时也不影响程序的性能。文章转自肥朝大神
  • DbUtils类:启动类
  • ResultSetHandler接口:转换类型接口
  • MapListHandler类:实现类,把记录转化成List
  • BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象
  • Qrery Runner类:执行SQL语句的类

史上最全面的Java开源Apache Commons 工具类介绍

9.Email

提供的一个开源的API,是对javamail的封装。

史上最全面的Java开源Apache Commons 工具类介绍

10.FileUpload

java web文件上传功能。

史上最全面的Java开源Apache Commons 工具类介绍

11.HttpClient

基于HttpCore实 现的一个HTTP/1.1兼容的HTTP客户端,它提供了一系列可重用的客户端身份验证、HTTP状态保持、HTTP连接管理module。

史上最全面的Java开源Apache Commons 工具类介绍

12.http://IO

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

史上最全面的Java开源Apache Commons 工具类介绍

13.Lang

主要是一些公共的工具集合,比如对字符、数组的操作等等。

史上最全面的Java开源Apache Commons 工具类介绍

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 
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); 
//这个是自己创建的bean 我这里省略了 
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 { 
 //有错误 int errors = ((Integer)results.get("firstName")).intValue(); 
}

猜你喜欢

转载自blog.csdn.net/AETYO/article/details/89921945
今日推荐