Apache Commons工具集简介

Apache Commons 包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。
 
Commons BeanUtils
http://jakarta.apache.org/commons/beanutils/index.html
说明:针对 Bean 的一个工具集。由于 Bean 往往是有一堆 get set 组成,所以 BeanUtils 也是在此基础上进行一些包装。
使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是 Bean Copy ,也就是 copy bean 的属性。如果做分层架构开发的话就会用到,比如从 PO Persistent Object )拷贝数据到 VO Value Object )。
传统方法如下:
// 得到 TeacherForm
 TeacherForm teacherForm=(TeacherForm)form;
 // 构造 Teacher 对象
 Teacher teacher=new Teacher();
 // 赋值
 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
 TeacherForm teacherForm=(TeacherForm)form;
 // 构造 Teacher 对象
 Teacher teacher=new Teacher();
 // 赋值
 BeanUtils.copyProperties(teacher,teacherForm);
 // 持久化 Teacher 对象到数据库
 HibernateDAO= ;
 HibernateDAO.save(teacher);
 
Commons CLI
http://jakarta.apache.org/commons/cli/index.html
说明:这是一个处理命令的工具。比如 main 方法输入的 string[] 需要解析。你可以预先定义好参数的规则,然后就可以调用 CLI 来解析。
使用示例:
// create Options object
Options options = new Options();
// add t option, option is the command parameter, false indicates that
// this parameter is not required.
options.addOption(“t”, false, “display current time”);
options.addOption("c", true, "country code");
CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);
if(cmd.hasOption("t")) {
    // print the date and time
}
else {
    // print the date
}
// get c option value
String countryCode = cmd.getOptionValue("c");
 
if(countryCode == null) {
    // print default date
}
else {
    // print date for country specified by countryCode
}
 
Commons Codec
http://jakarta.apache.org/commons/codec/index.html
说明:这个工具是用来编码和解码的,包括 Base64 URL Soundx 等等。用这个工具的人应该很清楚这些,我就不多介绍了。
 
Commons Collections
http://jakarta.apache.org/commons/collections/
说明:你可以把这个工具看成是 java.util 的扩展。
使用示例:举一个简单的例子
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"
 
Commons Configuration
http://jakarta.apache.org/commons/configuration/
说明:这个工具是用来帮助处理配置文件的,支持很多种存储方式
<[if !supportLists]> 1.      <[endif]> Properties files
<[if !supportLists]> 2.      <[endif]> XML documents
<[if !supportLists]> 3.      <[endif]> Property list files (.plist)
<[if !supportLists]> 4.      <[endif]> JNDI
<[if !supportLists]> 5.      <[endif]> JDBC Datasource
<[if !supportLists]> 6.      <[endif]> System properties
<[if !supportLists]> 7.      <[endif]> Applet parameters
<[if !supportLists]> 8.      <[endif]> Servlet parameters
使用示例:举一个 Properties 的简单例子
# usergui.properties, definining the GUI,
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");
 
Commons DBCP
http://jakarta.apache.org/commons/dbcp/
说明: Database Connection pool, Tomcat 就是用的这个,不用我多说了吧,要用的自己去网站上看说明。
 
Commons DbUtils
http://jakarta.apache.org/commons/dbutils/
说明:我以前在写数据库程序的时候,往往把数据库操作单独做一个包。 DbUtils 就是这样一个工具,以后开发不用再重复这样的工作了。值得一体的是,这个工具并不是现在流行的 OR-Mapping 工具(比如 Hibernate ),只是简化数据库操作,比如
QueryRunner run = new QueryRunner(dataSource);
// Execute the query and get the results back from the handler
Object[] result = (Object[]) run.query(
    "SELECT * FROM Person WHERE name=?", "John Doe");
 
Commons FileUpload
http://jakarta.apache.org/commons/fileupload/
说明: jsp 的上传文件功能怎么做呢?
使用示例:
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
 
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
 
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
 
    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}
 
Commons HttpClient
http://jakarta.apache.org/commons/httpclient/
说明:这个工具可以方便通过编程的方式去访问网站。
使用示例:最简单的 Get 操作
GetMethod get = new GetMethod("http://jakarta.apache.org");
// execute method and handle any error responses.
  ...
InputStream in = get.getResponseBodyAsStream();
// Process the data from the input stream.
 get.releaseConnection();
 
Commons IO
http://jakarta.apache.org/commons/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:/");
 
 
Commons JXPath
http://jakarta.apache.org/commons/jxpath/
说明: Xpath 你知道吧,那么 JXpath 就是基于 Java 对象的 Xpath ,也就是用 Xpath Java 对象进行查询。这个东西还是很有想像力的。
使用示例:
Address address = (Address)JXPathContext.newContext(vendor).
         getValue("locations[address/zipCode='90210']/address");
上述代码等同于
Address address = null;
Collection locations = vendor.getLocations();
Iterator it = locations.iterator();
while (it.hasNext()){
    Location location = (Location)it.next();
    String zipCode = location.getAddress().getZipCode();
    if (zipCode.equals("90210")){
      address = location.getAddress();
      break;
    }
}
 
 
Commons Lang
http://jakarta.apache.org/commons/lang/
说明:这个工具包可以看成是对 java.lang 的扩展。提供了诸如 StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils 等工具类。
 
Commons Logging
http://jakarta.apache.org/commons/logging/
说明:你知道 Log4j 吗?
 
Commons Math
http://jakarta.apache.org/commons/math/
说明:看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和 Commons Lang 重复了,但是这个包更专注于做数学工具,功能更强大。
 
Commons Net
http://jakarta.apache.org/commons/net/
说明:这个包还是很实用的,封装了很多网络协议。
<[if !supportLists]> 1.      <[endif]> FTP
<[if !supportLists]> 2.      <[endif]> NNTP
<[if !supportLists]> 3.      <[endif]> SMTP
<[if !supportLists]> 4.      <[endif]> POP3
<[if !supportLists]> 5.      <[endif]> Telnet
<[if !supportLists]> 6.      <[endif]> TFTP
<[if !supportLists]> 7.      <[endif]> Finger
<[if !supportLists]> 8.      <[endif]> Whois
<[if !supportLists]> 9.      <[endif]> rexec/rcmd/rlogin
<[if !supportLists]> 10.  <[endif]> Time (rdate) and Daytime
<[if !supportLists]> 11.  <[endif]> Echo
<[if !supportLists]> 12.  <[endif]> Discard
<[if !supportLists]> 13.  <[endif]> NTP/SNTP
使用示例:
TelnetClient telnet = new TelnetClient();
telnet.connect( "192.168.1.99", 23 );
InputStream in = telnet.getInputStream();
PrintStream out = new PrintStream( telnet.getOutputStream() );
...
telnet.close();
 
Commons Validator
http://jakarta.apache.org/commons/validator/
说明:用来帮助进行验证的工具。比如验证 Email 字符串,日期字符串等是否合法。
使用示例:
// Get the Date validator
DateValidator validator = DateValidator.getInstance();
// Validate/Convert the date
Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
if (fooDate == null) {
     // error...not a valid date
     return;
}
 
Commons Virtual File System
http://jakarta.apache.org/commons/vfs/
说明:提供对各种资源的访问接口。支持的资源类型包括
<[if !supportLists]> 1.      <[endif]> CIFS
<[if !supportLists]> 2.      <[endif]> FTP
<[if !supportLists]> 3.      <[endif]> Local Files
<[if !supportLists]> 4.      <[endif]> HTTP and HTTPS
<[if !supportLists]> 5.      <[endif]> SFTP
<[if !supportLists]> 6.      <[endif]> Temporary Files
<[if !supportLists]> 7.      <[endif]> WebDAV
<[if !supportLists]> 8.      <[endif]> Zip, Jar and Tar (uncompressed, tgz or tbz2)
<[if !supportLists]> 9.      <[endif]> gzip and bzip2
<[if !supportLists]> 10.  <[endif]> res
<[if !supportLists]> 11.  <[endif]> ram
这个包的功能很强大,极大的简化了程序对资源的访问。
使用示例:
jar 中读取文件
// Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
 
// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
    System.out.println( children[ i ].getName().getBaseName() );
}
smb 读取文件
StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);
 
   
有人说 Apache 就像是丐帮,里面的项目多而杂。的确如此, Apache 的项目水平参差不齐,而且不同的项目之间也常常会有功能重叠,甚至有撞车,比如 Ant Maven 。不过 Apache 的优秀项目还是有很多的,比如 Apache Http Server Tomcat Ant, Geronimo 等等。 Apache Commons 是工具包,为其他项目提供支持,很多 Commons 中的项目就是从其他项目中抽取出来的。希望我的介绍能对你有所帮助,有些我提到的 Commons 中的项目我也没有用过,只是现学现卖,难免错误和疏漏,希望谅解。

你可能感兴趣的:(职场,休闲)