Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类做简单介绍。
Commons简介
组件
功能介绍
commons-beanutils
提供了对于JavaBean进行各种操作,克隆对象,属性等等.
commons-betwixt
XML与Java对象之间相互转换.
commons-codec
处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等.
commons-collections
java集合框架操作.
commons-compress
java提供文件打包 压缩类库.
commons-configuration
一个java应用程序的配置管理类库.
commons-dbcp
提供数据库连接池服务.
commons-dbutils
提供对jdbc 的操作封装来简化数据查询和记录读取操作.
commons-email
java发送邮件 对javamail的封装.
commons-fileupload
提供文件上传功能.
commons-httpclient
提供HTTP客户端与服务器的各种通讯操作. 现在已改成HttpComponents
commons-io
io工具的封装.
commons-lang
Java基本对象方法的工具类包 如:StringUtils,ArrayUtils,DateUtils,DateFormatUtils等等.
commons-logging
提供的是一个Java 的日志接口.
commons-validator
提供了客户端和服务器端的数据验证框架.
Maven依赖
commons-beanutils
commons-beanutils
1.9.3
commons-betwixt
commons-betwixt
0.8
commons-codec
commons-codec
1.10
org.apache.commons
commons-collections4
4.1
commons-collections
commons-collections
3.2.1
org.apache.commons
commons-compress
1.18
org.apache.commons
commons-configuration2
2.2
commons-configuration
commons-configuration
1.10
org.apache.commons
commons-dbcp2
2.1.1
commons-dbcp
commons-dbcp
1.4
commons-dbutils
commons-dbutils
1.6
org.apache.commons
commons-email
1.4
commons-email
commons-email
1.0
commons-fileupload
commons-fileupload
1.3.1
org.apache.httpcomponents
httpclient
4.5.12
commons-httpclient
commons-httpclient
3.1
commons-io
commons-io
2.6
org.apache.commons
commons-io
1.3.2
org.apache.commons
commons-lang3
3.9
commons-lang
commons-lang
2.6
commons-logging
commons-logging
1.2
commons-validator
commons-validator
1.6
1、commons-beanutils
提供了对于JavaBean进行各种操作, 比如对象,属性复制等等。
importjava.util.HashMap;importjava.util.Map;importorg.apache.commons.beanutils.BeanUtils;importorg.apache.commons.beanutils.PropertyUtils;public classCommonsBeanUtils {public static void main(String[] args) throwsException {//****************************************************************************
Person person = newPerson();
person.setName("tom");
person.setAge(21);//克隆对象
Person person2 =(Person) BeanUtils.cloneBean(person);
System.out.println(person2.getName()+ ">>" +person2.getAge());//****************************************************************************
Map map = new HashMap();
map.put("name", "tom");
map.put("email", "tom@");
map.put("age", "21");//将map转化为一个Person对象
Person person3 = newPerson();
BeanUtils.populate(person3, map);
System.out.println(person3.getName()+ ">>" +person3.getAge());//通过上面的一行代码,此时person的属性就已经具有了上面所赋的值了。//将一个Bean转化为一个Map对象了,如下:
Map map2 =BeanUtils.describe(person3);
System.out.println(map2.get("name") + ">>" + map2.get("age"));//****************************************************************************
Person person4 = newPerson();
person4.setName("andy");//反射调用get方法
String name = (String) PropertyUtils.getProperty(person4, "name");
System.out.println(name);//反射调用set方法
PropertyUtils.setProperty(person4, "age", 25);
System.out.println(person4.getAge());
}
}
2、commons-betwixt
XML与Java对象之间相互转换。
importjava.io.StringReader;importjava.io.StringWriter;importorg.apache.commons.betwixt.io.BeanReader;importorg.apache.commons.betwixt.io.BeanWriter;public classCommonsBetwixt {public static void main(String[] args) throwsException {//****************************创建一个例子Bean,并将它转化为XML ************************************************//先创建一个StringWriter,我们将把它写入为一个字符串
StringWriter outputWriter = newStringWriter();//Betwixt在这里仅仅是将Bean写入为一个片断//所以如果要想完整的XML内容,我们应该写入头格式
outputWriter.write("\n");//创建一个BeanWriter,其将写入到我们预备的stream中
BeanWriter beanWriter = newBeanWriter(outputWriter);//配置betwixt//更多详情请参考java docs 或最新的文档
beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
beanWriter.getBindingConfiguration().setMapIDs(false);
beanWriter.enablePrettyPrint();//如果这个地方不传入XML的根节点名,Betwixt将自己猜测是什么//但是让我们将例子Bean名作为根节点吧
beanWriter.write("person", new Person("John Smith", 21));//输出结果
System.out.println(outputWriter.toString());//Betwixt写的是片断而不是一个文档,所以不要自动的关闭掉writers或者streams,//但这里仅仅是一个例子,不会做更多事情,所以可以关掉
outputWriter.close();//****************************将XML转化为JavaBean ************************************************//先创建一个XML,由于这里仅是作为例子,所以我们硬编码了一段XML内容
StringReader xmlReader = new StringReader(" 25James Smith");//创建BeanReader
BeanReader beanReader = newBeanReader();//配置reader
beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
beanReader.getBindingConfiguration().setMapIDs(false);//注册beans,以便betwixt知道XML将要被转化为一个什么Bean
beanReader.registerBeanClass("person", Person.class);//现在我们对XML进行解析
Person person =(Person) beanReader.parse(xmlReader);//输出结果
System.out.println(person);
}
}
3、commons-codec
公共的编解码实现,比如Base64, Hex, MD5,Phonetic and URLs等等。
importorg.apache.commons.codec.binary.Base64;public classCommonsCodec {public static void main(String[] args) throwsException {
Base64 base64= newBase64();
String encodestr= base64.encodeToString("abcd".getBytes("UTF-8"));
System.out.println("Base64 编码后:" +encodestr);
String decodestr= new String(Base64.decodeBase64("YWJjZA=="));
System.out.println("Base64 解码后:"+decodestr);
}
}
4、commons-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系列接口的一组类
importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importorg.apache.commons.collections.BidiMap;importorg.apache.commons.collections.CollectionUtils;importorg.apache.commons.collections.OrderedMap;importorg.apache.commons.collections.bidimap.TreeBidiMap;importorg.apache.commons.collections.map.LinkedMap;public classCommonsCollections {public static voidmain(String[] args) {//得到集合里按顺序存放的key之后的某一Key
OrderedMap map = newLinkedMap ();
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 = newTreeBidiMap();
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、commons-compress
commons compress中的打包、压缩类库。
importjava.io.File;importjava.io.FileInputStream;importorg.apache.commons.compress.archivers.zip.ZipArchiveEntry;importorg.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;public classCommonsCompress {public static void main(String[] args) throwsException {//创建压缩对象
ZipArchiveEntry entry = new ZipArchiveEntry("CompressTest");//要压缩的文件
File f = new File("e:\\test.pdf");
FileInputStream fis= newFileInputStream(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、commons-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
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、commons-dbcp
(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。
importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjavax.sql.DataSource;importorg.apache.commons.dbcp.ConnectionFactory;importorg.apache.commons.dbcp.DriverManagerConnectionFactory;importorg.apache.commons.dbcp.PoolableConnectionFactory;importorg.apache.commons.dbcp.PoolingDataSource;importorg.apache.commons.pool.ObjectPool;importorg.apache.commons.pool.impl.GenericObjectPool;public classCommonsDbcp {public static voidmain(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 staticDataSource setupDataSource(String connectURI) {//设置连接地址
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI, null);//创建连接工厂
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null, null, connectURI, false, false);//获取GenericObjectPool 连接的实例
ObjectPool connectionPool = newGenericObjectPool(poolableConnectionFactory);//创建 PoolingDriver
PoolingDataSource dataSource = newPoolingDataSource(connectionPool);returndataSource;
}
}
8、commons-dbutils
Apache组织提供的一个资源JDBC工具类库,它是对JDBC的简单封装,对传统操作数据库的类进行二次封装,可以把结果集转化成List。,同时也不影响程序的性能。
DbUtils类:启动类
ResultSetHandler接口:转换类型接口
MapListHandler类:实现类,把记录转化成List
BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象
Qrery Runner类:执行SQL语句的类
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.List;importjava.util.Map;importorg.apache.commons.dbutils.DbUtils;importorg.apache.commons.dbutils.QueryRunner;importorg.apache.commons.dbutils.handlers.BeanListHandler;importorg.apache.commons.dbutils.handlers.MapListHandler;public classCommonsDbutils {public static voidmain(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);//****************************转换成list ************************************
try{
conn=DriverManager.getConnection(url, user, password);
QueryRunner qr= newQueryRunner();
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("age:" + p.getAge() + ",name:" +p.getName());
}
}catch(SQLException e) {
e.printStackTrace();
}finally{
DbUtils.closeQuietly(conn);
}//****************************转换成map ************************************
try{
conn=DriverManager.getConnection(url, user, password);
QueryRunner qr= newQueryRunner();
List results= (List) qr.query(conn, "select age,name from person",newMapListHandler());for (int i = 0; i < results.size(); i++) {
Map map=(Map) results.get(i);
System.out.println("age:" + map.get("age") + ",name:"+ map.get("name"));
}
}catch(SQLException e) {
e.printStackTrace();
}finally{
DbUtils.closeQuietly(conn);
}
}
}
9、commons-email
提供的一个开源的API,是对javamail的封装。
importorg.apache.commons.mail.DefaultAuthenticator;importorg.apache.commons.mail.Email;importorg.apache.commons.mail.EmailException;importorg.apache.commons.mail.SimpleEmail;public classCommosEmail {public static void main(String[] args) throwsEmailException {
Email email= newSimpleEmail();
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、commons-fileupload
java web文件上传功能。
//检查请求是否含有上传文件
boolean isMultipart =ServletFileUpload.isMultipartContent(request);//如果你的应用近于最简单的情况,上面的处理就够了。但我们有时候还是需要更多的控制。//下面提供了几种控制选择
DiskFileItemFactory factory = newDiskFileItemFactory();//Set factory constraints
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);//Create a new file upload handler
ServletFileUpload upload = newServletFileUpload(factory);//设置最大上传大小
upload.setSizeMax(yourMaxRequestSize);//解析所有请求
List items =upload.parseRequest(request);//Create a factory for disk-based file items
DiskFileItemFactory factory = newDiskFileItemFactory(
yourMaxMemorySize, yourTempDirectory);//一旦解析完成,你需要进一步处理item的列表。
Iterator iter =items.iterator();while(iter.hasNext()) {
FileItem item=(FileItem) iter.next();if(item.isFormField()) {
processFormField(item);
}else{
processUploadedFile(item);
}
}//区分数据是否为简单的表单数据,如果是简单的数据
if(item.isFormField()) {
String name=item.getFieldName();
String value=item.getString();//...省略步骤
}//如果是提交的文件:
if (!item.isFormField()) {
String fieldName=item.getFieldName();
String fileName=item.getName();
String contentType=item.getContentType();boolean isInMemory =item.isInMemory();long sizeInBytes =item.getSize();//...省略步骤
}//对于这些item,我们通常要把它们写入文件,或转为一个流
if(writeToFile) {
File uploadedFile= newFile(...);
item.write(uploadedFile);
}else{
InputStream uploadedStream=item.getInputStream();//...省略步骤
uploadedStream.close();
}//或转为字节数组保存在内存中
byte[] data =item.get();//...省略步骤//如果这个文件真的很大,你可能会希望向用户报告到底传了多少到服务端,让用户了解上传的过程
ProgressListener progressListener = newProgressListener(){public void update(long pBytesRead, long pContentLength, intpItems) {
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、commons-httpclient
基于HttpCore实 现的一个HTTP/1.1兼容的HTTP客户端,它提供了一系列可重用的客户端身份验证、HTTP状态保持、HTTP连接管理module。
importjava.io.IOException;import org.apache.commons.httpclient.*;importorg.apache.commons.httpclient.methods.GetMethod;importorg.apache.commons.httpclient.params.HttpMethodParams;public classCommonsHttpclient {public static voidmain(String[] args) {//构造HttpClient的实例
HttpClient httpClient = newHttpClient();//创建GET方法的实例
GetMethod getMethod = new GetMethod("http://www.ibm.com");//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,newDefaultHttpMethodRetryHandler());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(newString(responseBody));
}catch(HttpException e) {//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
}catch(IOException e) {//发生网络异常
e.printStackTrace();
}finally{//释放连接
getMethod.releaseConnection();
}//构造HttpClient的实例
HttpClient httpClient = newHttpClient();//创建POST方法的实例
String url = "http://www.oracle.com/";
PostMethod postMethod= newPostMethod(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、commons-io
对java.io的扩展 操作文件非常方便。
importjava.io.BufferedReader;importjava.io.File;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.URL;importjava.util.List;importorg.apache.commons.io.FileSystemUtils;importorg.apache.commons.io.FileUtils;importorg.apache.commons.io.IOUtils;public classCommonsIo {public static void main(String[] args) throwsException {//1.读取Stream//标准代码:
InputStream in = new URL("http://jakarta.apache.org").openStream();
InputStreamReader inR= newInputStreamReader(in);
BufferedReader buf= newBufferedReader(inR);
String line;while ((line = buf.readLine()) != null) {
System.out.println(line);
}
in.close();//使用IOUtils
InputStream in2 = new URL("http://jakarta.apache.org").openStream();try{
System.out.println(IOUtils.toString(in2));
}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、commos-lang
主要是一些公共的工具集合,比如对字符、数组的操作等等。
importjava.util.Calendar;importjava.util.Date;importorg.apache.commons.lang.ArrayUtils;importorg.apache.commons.lang.ClassUtils;importorg.apache.commons.lang.RandomStringUtils;importorg.apache.commons.lang.StringEscapeUtils;importorg.apache.commons.lang.StringUtils;importorg.apache.commons.lang.time.DateFormatUtils;importorg.apache.commons.lang.time.DateUtils;public classCommonsLang {public static void main(String[] args) throwsException {//********************************ArrayUtils***************************************//将两个数组合并为一个数组
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());//********************************StringUtils***************************************//截取从from开始字符串
StringUtils.substringAfter("SELECT * FROM PERSON ", "from");//判断该字符串是不是为数字(0~9)组成,如果是,返回true 但该方法不识别有小数点和请注意
StringUtils.isNumeric("454534"); //返回true//取得类名
System.out.println(ClassUtils.getShortClassName(CommonsLang.class));//取得其包名
System.out.println(ClassUtils.getPackageName(CommonsLang.class));//五位的随机字母和数字
System.out.println(RandomStringUtils.randomAlphanumeric(5));//StringEscapeUtils
System.out.println(StringEscapeUtils.escapeHtml(""));//输出结果为
System.out.println(StringEscapeUtils.escapeJava("String"));//StringUtils,判断是否是空格字符
System.out.println(StringUtils.isBlank(" "));//将数组中的内容以,分隔
System.out.println(StringUtils.join(s1, ","));//在右边加下字符,使之总长度为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));//********************************DateFormatUtils***************************************
System.out.println(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));//直接将日期格式化为内置的固定格式
System.out.println(DateFormatUtils.ISO_DATE_FORMAT.format(newDate()));//字符型日期转化为Date
System.out.println(DateUtils.parseDate("2014-11-11 11:11:11", new String[] { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy/MM/dd"}));//日期舍入与截整
System.out.println(DateUtils.truncate(newDate(), Calendar.DATE));//判断是否是同一天
System.out.println(DateUtils.isSameDay(new Date(), newDate()));//加天数
System.out.println(DateUtils.addDays(new Date(), 10));
}
}
14、commos-logging
提供的是一个Java 的日志接口,同时兼顾轻量级和不依赖于具体的日志实现工具。
importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;public classCommosLogging {private static Log log = LogFactory.getLog(CommosLogging.class);public static voidmain(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= newString[] {regex1, regex1};//创建验证
RegexValidator validator = newRegexValidator(regexs, caseSensitive);//验证返回boolean
boolean valid = validator.isValid("abc-def");//验证返回字符串
String result = validator.validate("abc-def");//验证返回数组
String[] groups = validator.match("abc-def");