(转)Apache Commons工具集简介

ApacheCommons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。

一、CommonsBeanUtils

http://jakarta.apache.org/commons/beanutils/index.html

说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。

使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是BeanCopy,也就是copybean的属性。如果做分层架构开发的话就会用到,比如从PO(PersistentObject)拷贝数据到VO(ValueObject)。

传统方法如下:

//得到TeacherForm

TeacherFormteacherForm=(TeacherForm)form;

//构造Teacher对象

Teacherteacher=newTeacher();

//赋值

teacher.setName(teacherForm.getName());

teacher.setAge(teacherForm.getAge());

teacher.setGender(teacherForm.getGender());

teacher.setMajor(teacherForm.getMajor());

teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher对象到数据库

HibernateDAO=;

HibernateDAO.save(teacher);

使用BeanUtils后,代码就大大改观了,如下所示:

//得到TeacherForm

TeacherFormteacherForm=(TeacherForm)form;

//构造Teacher对象

Teacherteacher=newTeacher();

//赋值

BeanUtils.copyProperties(teacher,teacherForm);

//持久化Teacher对象到数据库

HibernateDAO=;

HibernateDAO.save(teacher);

二、CommonsCLI

http://jakarta.apache.org/commons/cli/index.html

说明:这是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则,然后就可以调用CLI来解析。

使用示例:

//createOptionsobject

Optionsoptions=newOptions();

//addtoption,optionisthecommandparameter,falseindicatesthat

//thisparameterisnotrequired.

options.addOption(“t”,false,“displaycurrenttime”);

options.addOption("c",true,"countrycode");

CommandLineParserparser=newPosixParser();

CommandLinecmd=parser.parse(options,args);

if(cmd.hasOption("t")){

//printthedateandtime

}else{

//printthedate

}

//getcoptionvalue

StringcountryCode=cmd.getOptionValue("c");

if(countryCode==null){

//printdefaultdate

}else{

//printdateforcountryspecifiedbycountryCode

}

三、CommonsCodec

http://jakarta.apache.org/commons/codec/index.html

说明:这个工具是用来编码和解码的,包括Base64,URL,Soundx等等。用这个工具的人应该很清楚这些,我就不多介绍了。

四、CommonsCollections

http://jakarta.apache.org/commons/collections/

说明:你可以把这个工具看成是java.util的扩展。

使用示例:举一个简单的例子

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

五、CommonsConfiguration

http://jakarta.apache.org/commons/configuration/

说明:这个工具是用来帮助处理配置文件的,支持很多种存储方式

1.Propertiesfiles

2.XMLdocuments

3.Propertylistfiles(.plist)

4.JNDI

5.JDBCDatasource

6.Systemproperties

7.Appletparameters

8.Servletparameters

使用示例:举一个Properties的简单例子

#usergui.properties,defininingtheGUI,

colors.background=#FFFFFF

colors.foreground=#000080

window.width=500

window.height=300

PropertiesConfigurationconfig=newPropertiesConfiguration("usergui.properties");

config.setProperty("colors.background","#000000);

config.save();

config.save("usergui.backup.properties);//saveacopy

Integerinteger=config.getInteger("window.width");

CommonsDBCP

http://jakarta.apache.org/commons/dbcp/

说明:DatabaseConnectionpool,Tomcat就是用的这个,不用我多说了吧,要用的自己去网站上看说明。

六、CommonsDbUtils

http://jakarta.apache.org/commons/dbutils/

说明:我以前在写数据库程序的时候,往往把数据库操作单独做一个包。DbUtils就是这样一个工具,以后开发不用再重复这样的工作了。值得一体的是,这个工具并不是现在流行的OR-Mapping工具(比如Hibernate),只是简化数据库操作,比如

QueryRunnerrun=newQueryRunner(dataSource);

//Executethequeryandgettheresultsbackfromthehandler

Object[]result=(Object[])run.query("SELECT*FROMPersonWHEREname=?","JohnDoe");

七、CommonsFileUpload

http://jakarta.apache.org/commons/fileupload/

说明:jsp的上传文件功能怎么做呢?

使用示例:

//Createafactoryfordisk-basedfileitems

FileItemFactoryfactory=newDiskFileItemFactory();

//Createanewfileuploadhandler

ServletFileUploadupload=newServletFileUpload(factory);

//Parsetherequest

List/*FileItem*/items=upload.parseRequest(request);

//Processtheuploadeditems

Iteratoriter=items.iterator();

while(iter.hasNext()){

FileItemitem=(FileItem)iter.next();

if(item.isFormField()){

processFormField(item);

}else{

processUploadedFile(item);

}

}

八、CommonsHttpClient

http://jakarta.apache.org/commons/httpclient/

说明:这个工具可以方便通过编程的方式去访问网站。

使用示例:最简单的Get操作

GetMethodget=newGetMethod("http://jakarta.apache.org");

//executemethodandhandleanyerrorresponses.

...

InputStreamin=get.getResponseBodyAsStream();

//Processthedatafromtheinputstream.

get.releaseConnection();

九、CommonsIO

http://jakarta.apache.org/commons/io/

说明:可以看成是java.io的扩展,我觉得用起来非常方便。

使用示例:

1.读取Stream

标准代码:

InputStreamin=newURL("http://jakarta.apache.org").openStream();

try{

InputStreamReaderinR=newInputStreamReader(in);

BufferedReaderbuf=newBufferedReader(inR);

Stringline;

while((line=buf.readLine())!=null){

System.out.println(line);

}

}finally{

in.close();

}

使用IOUtils

InputStreamin=newURL("http://jakarta.apache.org").openStream();

try{

System.out.println(IOUtils.toString(in));

}finally{

IOUtils.closeQuietly(in);

}

2.读取文件

Filefile=newFile("/commons/io/project.properties");

Listlines=FileUtils.readLines(file,"UTF-8");

3.察看剩余空间

longfreeSpace=FileSystemUtils.freeSpace("C:/");

十、CommonsJXPath

http://jakarta.apache.org/commons/jxpath/

说明:Xpath你知道吧,那么JXpath就是基于Java对象的Xpath,也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。

使用示例:

Addressaddress=(Address)JXPathContext.newContext(vendor).

getValue("locations[address/zipCode='90210']/address");

上述代码等同于

Addressaddress=null;

Collectionlocations=vendor.getLocations();

Iteratorit=locations.iterator();

while(it.hasNext()){

Locationlocation=(Location)it.next();

StringzipCode=location.getAddress().getZipCode();

if(zipCode.equals("90210")){

address=location.getAddress();

break;

}

}

十一、CommonsLang

http://jakarta.apache.org/commons/lang/

说明:这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils,StringEscapeUtils,RandomStringUtils,Tokenizer,WordUtils等工具类。

十二、CommonsLogging

http://jakarta.apache.org/commons/logging/

说明:你知道Log4j吗?

十三、CommonsMath

http://jakarta.apache.org/commons/math/

说明:看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和CommonsLang重复了,但是这个包更专注于做数学工具,功能更强大。

十四、CommonsNet

http://jakarta.apache.org/commons/net/

说明:这个包还是很实用的,封装了很多网络协议。

1.FTP

2.NNTP

3.SMTP

4.POP3

5.Telnet

6.TFTP

7.Finger

8.Whois

9.rexec/rcmd/rlogin

10.Time(rdate)andDaytime

11.Echo

12.Discard

13.NTP/SNTP

使用示例:

TelnetClienttelnet=newTelnetClient();

telnet.connect("192.168.1.99",23);

InputStreamin=telnet.getInputStream();

PrintStreamout=newPrintStream(telnet.getOutputStream());

...

telnet.close();

十五、CommonsValidator

http://jakarta.apache.org/commons/validator/

说明:用来帮助进行验证的工具。比如验证Email字符串,日期字符串等是否合法。

使用示例:

//GettheDatevalidator

DateValidatorvalidator=DateValidator.getInstance();

//Validate/Convertthedate

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

if(fooDate==null){

//error...notavaliddate

return;

}

十六、CommonsVirtualFileSystem

http://jakarta.apache.org/commons/vfs/

说明:提供对各种资源的访问接口。支持的资源类型包括

1.CIFS

2.FTP

3.LocalFiles

4.HTTPandHTTPS

5.SFTP

6.TemporaryFiles

7.WebDAV

8.Zip,JarandTar(uncompressed,tgzortbz2)

9.gzipandbzip2

10.res

11.ram

这个包的功能很强大,极大的简化了程序对资源的访问。

使用示例:

从jar中读取文件

//LocatetheJarfile

FileSystemManagerfsManager=VFS.getManager();

FileObjectjarFile=fsManager.resolveFile("jar:lib/aJarFile.jar");

//ListthechildrenoftheJarfile

FileObject[]children=jarFile.getChildren();

System.out.println("Childrenof"+jarFile.getName().getURI());

for(inti=0;i<children.length;i++){

System.out.println(children[i].getName().getBaseName());

}

从smb读取文件

StaticUserAuthenticatorauth=newStaticUserAuthenticator("username","password",null);

FileSystemOptionsopts=newFileSystemOptions();

DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts,auth);

FileObjectfo=VFS.getManager().resolveFile("smb://host/anyshare/dir",opts);

相关推荐