﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Martin's Home-文章分类-Apache</title><link>http://www.blogjava.net/martinyuan/category/28602.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 02 Jan 2008 19:05:14 GMT</lastBuildDate><pubDate>Wed, 02 Jan 2008 19:05:14 GMT</pubDate><ttl>60</ttl><item><title>Apache Commons工具集简介[转载]</title><link>http://www.blogjava.net/martinyuan/articles/172278.html</link><dc:creator>Martin Yuan</dc:creator><author>Martin Yuan</author><pubDate>Wed, 02 Jan 2008 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/martinyuan/articles/172278.html</guid><wfw:comment>http://www.blogjava.net/martinyuan/comments/172278.html</wfw:comment><comments>http://www.blogjava.net/martinyuan/articles/172278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martinyuan/comments/commentRss/172278.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martinyuan/services/trackbacks/172278.html</trackback:ping><description><![CDATA[<p><span class="hilite1">Apache</span>&nbsp;<span class="hilite2">Common</span>s包含了很多开源的工具，用于解决平时编程经常会遇到的问题，减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西，我只是做了一个汇总整理。<br />
<br />
<span class="hilite2">Common</span>s&nbsp;BeanUtils<br />
<a href="http://jakarta.apache.org/commons/beanutils/index.html">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/beanutils/index.html</a><br />
说明：针对Bean的一个工具集。由于Bean往往是有一堆get和set组成，所以BeanUtils也是在此基础上进行一些包装。<br />
使用示例：功能有很多，网站上有详细介绍。一个比较常用的功能是Bean&nbsp;Copy，也就是copy&nbsp;bean的属性。如果做分层架构开发的话就会用到，比如从PO（Persistent&nbsp;Object）拷贝数据到VO（Value&nbsp;Object）。<br />
传统方法如下：<br />
//得到TeacherForm<br />
&nbsp;TeacherForm&nbsp;teacherForm=(TeacherForm)form;<br />
&nbsp;//构造Teacher对象<br />
&nbsp;Teacher&nbsp;teacher=new&nbsp;Teacher();<br />
&nbsp;//赋值<br />
&nbsp;teacher.setName(teacherForm.getName());<br />
&nbsp;teacher.setAge(teacherForm.getAge());<br />
&nbsp;teacher.setGender(teacherForm.getGender());<br />
&nbsp;teacher.setMajor(teacherForm.getMajor());<br />
&nbsp;teacher.setDepartment(teacherForm.getDepartment());<br />
&nbsp;&nbsp;<br />
&nbsp;//持久化Teacher对象到数据库<br />
&nbsp;HibernateDAO=&nbsp;;<br />
&nbsp;HibernateDAO.save(teacher);<br />
<br />
使用BeanUtils后，代码就大大改观了，如下所示：<br />
//得到TeacherForm<br />
&nbsp;TeacherForm&nbsp;teacherForm=(TeacherForm)form;<br />
&nbsp;//构造Teacher对象<br />
&nbsp;Teacher&nbsp;teacher=new&nbsp;Teacher();<br />
&nbsp;//赋值<br />
&nbsp;BeanUtils.copyProperties(teacher,teacherForm);<br />
&nbsp;//持久化Teacher对象到数据库<br />
&nbsp;HibernateDAO=&nbsp;;<br />
&nbsp;HibernateDAO.save(teacher);<br />
<br />
<span class="hilite2">Common</span>s&nbsp;CLI<br />
<a href="http://jakarta.apache.org/commons/cli/index.html">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/cli/index.html</a><br />
说明：这是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则，然后就可以调用CLI来解析。<br />
使用示例：<br />
//&nbsp;create&nbsp;Options&nbsp;object<br />
Options&nbsp;options&nbsp;=&nbsp;new&nbsp;Options();<br />
//&nbsp;add&nbsp;t&nbsp;option,&nbsp;option&nbsp;is&nbsp;the&nbsp;command&nbsp;parameter,&nbsp;false&nbsp;indicates&nbsp;that&nbsp;<br />
//&nbsp;this&nbsp;parameter&nbsp;is&nbsp;not&nbsp;required.<br />
options.addOption(&#8220;t&#8221;,&nbsp;false,&nbsp;&#8220;display&nbsp;current&nbsp;time&#8221;);<br />
options.addOption("c",&nbsp;true,&nbsp;"country&nbsp;code");<br />
CommandLineParser&nbsp;parser&nbsp;=&nbsp;new&nbsp;PosixParser();<br />
CommandLine&nbsp;cmd&nbsp;=&nbsp;parser.parse(&nbsp;options,&nbsp;args);<br />
if(cmd.hasOption("t"))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;the&nbsp;date&nbsp;and&nbsp;time<br />
}<br />
else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;the&nbsp;date<br />
}<br />
//&nbsp;get&nbsp;c&nbsp;option&nbsp;value<br />
String&nbsp;countryCode&nbsp;=&nbsp;cmd.getOptionValue("c");<br />
<br />
if(countryCode&nbsp;==&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;default&nbsp;date<br />
}<br />
else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;date&nbsp;for&nbsp;country&nbsp;specified&nbsp;by&nbsp;countryCode<br />
}<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Codec<br />
<a href="http://jakarta.apache.org/commons/codec/index.html">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/codec/index.html</a><br />
说明：这个工具是用来编码和解码的，包括Base64，URL，Soundx等等。用这个工具的人应该很清楚这些，我就不多介绍了。<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Collections<br />
<a href="http://jakarta.apache.org/commons/collections/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/collections/</a><br />
说明：你可以把这个工具看成是java.util的扩展。<br />
使用示例：举一个简单的例子<br />
OrderedMap&nbsp;map&nbsp;=&nbsp;new&nbsp;LinkedMap();<br />
map.put("FIVE",&nbsp;"5");<br />
map.put("SIX",&nbsp;"6");<br />
map.put("SEVEN",&nbsp;"7");<br />
map.firstKey();&nbsp;&nbsp;//&nbsp;returns&nbsp;"FIVE"<br />
map.nextKey("FIVE");&nbsp;&nbsp;//&nbsp;returns&nbsp;"SIX"<br />
map.nextKey("SIX");&nbsp;&nbsp;//&nbsp;returns&nbsp;"SEVEN"<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Configuration<br />
<a href="http://jakarta.apache.org/commons/configuration/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/configuration/</a><br />
说明：这个工具是用来帮助处理配置文件的，支持很多种存储方式<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;files<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;XML&nbsp;documents<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;Property&nbsp;list&nbsp;files&nbsp;(.plist)<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;JNDI<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;JDBC&nbsp;Datasource<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;System&nbsp;properties<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;Applet&nbsp;parameters<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Servlet&nbsp;parameters<br />
使用示例：举一个Properties的简单例子<br />
#&nbsp;usergui.properties,&nbsp;definining&nbsp;the&nbsp;GUI,<br />
colors.background&nbsp;=&nbsp;#FFFFFF<br />
colors.foreground&nbsp;=&nbsp;#000080<br />
<br />
window.width&nbsp;=&nbsp;500<br />
window.height&nbsp;=&nbsp;300<br />
<br />
PropertiesConfiguration&nbsp;config&nbsp;=&nbsp;new&nbsp;PropertiesConfiguration("usergui.properties");<br />
config.setProperty("colors.background",&nbsp;"#000000);<br />
config.save();<br />
config.save("usergui.backup.properties);//save&nbsp;a&nbsp;copy<br />
Integer&nbsp;integer&nbsp;=&nbsp;config.getInteger("window.width");<br />
<br />
<span class="hilite2">Common</span>s&nbsp;DBCP<br />
<a href="http://jakarta.apache.org/commons/dbcp/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/dbcp/</a><br />
说明：Database&nbsp;Connection&nbsp;pool,&nbsp;Tomcat就是用的这个，不用我多说了吧，要用的自己去网站上看说明。<br />
<br />
<span class="hilite2">Common</span>s&nbsp;DbUtils<br />
<a href="http://jakarta.apache.org/commons/dbutils/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/dbutils/</a><br />
说明：我以前在写数据库程序的时候，往往把数据库操作单独做一个包。DbUtils就是这样一个工具，以后开发不用再重复这样的工作了。值得一体的是，这个工具并不是现在流行的OR-Mapping工具（比如Hibernate），只是简化数据库操作，比如<br />
QueryRunner&nbsp;run&nbsp;=&nbsp;new&nbsp;QueryRunner(dataSource);<br />
//&nbsp;Execute&nbsp;the&nbsp;query&nbsp;and&nbsp;get&nbsp;the&nbsp;results&nbsp;back&nbsp;from&nbsp;the&nbsp;handler<br />
Object[]&nbsp;result&nbsp;=&nbsp;(Object[])&nbsp;run.query(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"SELECT&nbsp;*&nbsp;FROM&nbsp;Person&nbsp;WHERE&nbsp;name=?",&nbsp;"John&nbsp;Doe");<br />
<br />
<span class="hilite2">Common</span>s&nbsp;FileUpload<br />
<a href="http://jakarta.apache.org/commons/fileupload/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/fileupload/</a><br />
说明：jsp的上传文件功能怎么做呢？<br />
使用示例：<br />
//&nbsp;Create&nbsp;a&nbsp;factory&nbsp;for&nbsp;disk-based&nbsp;file&nbsp;items<br />
FileItemFactory&nbsp;factory&nbsp;=&nbsp;new&nbsp;DiskFileItemFactory();<br />
<br />
//&nbsp;Create&nbsp;a&nbsp;new&nbsp;file&nbsp;upload&nbsp;handler<br />
ServletFileUpload&nbsp;upload&nbsp;=&nbsp;new&nbsp;ServletFileUpload(factory);<br />
<br />
//&nbsp;Parse&nbsp;the&nbsp;request<br />
List&nbsp;/*&nbsp;FileItem&nbsp;*/&nbsp;items&nbsp;=&nbsp;upload.parseRequest(request);<br />
//&nbsp;Process&nbsp;the&nbsp;uploaded&nbsp;items<br />
Iterator&nbsp;iter&nbsp;=&nbsp;items.iterator();<br />
while&nbsp;(iter.hasNext())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileItem&nbsp;item&nbsp;=&nbsp;(FileItem)&nbsp;iter.next();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(item.isFormField())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processFormField(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processUploadedFile(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
<span class="hilite2">Common</span>s&nbsp;HttpClient<br />
<a href="http://jakarta.apache.org/commons/httpclient/">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/httpclient/</a><br />
说明：这个工具可以方便通过编程的方式去访问网站。<br />
使用示例：最简单的Get操作<br />
GetMethod&nbsp;get&nbsp;=&nbsp;new&nbsp;GetMethod("http://jakarta.<span class="hilite1">apache</span>.org");<br />
//&nbsp;execute&nbsp;method&nbsp;and&nbsp;handle&nbsp;any&nbsp;error&nbsp;responses.<br />
&nbsp;&nbsp;...<br />
InputStream&nbsp;in&nbsp;=&nbsp;get.getResponseBodyAsStream();<br />
//&nbsp;Process&nbsp;the&nbsp;data&nbsp;from&nbsp;the&nbsp;input&nbsp;stream.<br />
&nbsp;get.releaseConnection();<br />
<br />
<span class="hilite2">Common</span>s&nbsp;IO<br />
<a href="http://jakarta.apache.org/commons/io/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/io/</a><br />
说明：可以看成是java.io的扩展，我觉得用起来非常方便。<br />
使用示例：<br />
1．读取Stream<br />
标准代码：<br />
InputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;URL(&nbsp;"http://jakarta.<span class="hilite1">apache</span>.org"&nbsp;).openStream();<br />
&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;inR&nbsp;=&nbsp;new&nbsp;InputStreamReader(&nbsp;in&nbsp;);<br />
&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;buf&nbsp;=&nbsp;new&nbsp;BufferedReader(&nbsp;inR&nbsp;);<br />
&nbsp;&nbsp;&nbsp;String&nbsp;line;<br />
&nbsp;&nbsp;&nbsp;while&nbsp;(&nbsp;(&nbsp;line&nbsp;=&nbsp;buf.readLine()&nbsp;)&nbsp;!=&nbsp;null&nbsp;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;line&nbsp;);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;}<br />
使用IOUtils<br />
InputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;URL(&nbsp;"http://jakarta.<span class="hilite1">apache</span>.org"&nbsp;).openStream();<br />
&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;IOUtils.toString(&nbsp;in&nbsp;)&nbsp;);<br />
&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;IOUtils.closeQuietly(in);<br />
&nbsp;}<br />
<br />
2．读取文件<br />
File&nbsp;file&nbsp;=&nbsp;new&nbsp;File("/<span class="hilite2">common</span>s/io/project.properties");<br />
List&nbsp;lines&nbsp;=&nbsp;FileUtils.readLines(file,&nbsp;"UTF-8");<br />
<br />
3．察看剩余空间<br />
long&nbsp;freeSpace&nbsp;=&nbsp;FileSystemUtils.freeSpace("C:/");<br />
<br />
<br />
<span class="hilite2">Common</span>s&nbsp;JXPath<br />
<a href="http://jakarta.apache.org/commons/jxpath/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/jxpath/</a><br />
说明：Xpath你知道吧，那么JXpath就是基于Java对象的Xpath，也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。<br />
使用示例：<br />
Address&nbsp;address&nbsp;=&nbsp;(Address)JXPathContext.newContext(vendor).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getValue("locations[address/zipCode='90210']/address");<br />
上述代码等同于<br />
Address&nbsp;address&nbsp;=&nbsp;null;<br />
Collection&nbsp;locations&nbsp;=&nbsp;vendor.getLocations();<br />
Iterator&nbsp;it&nbsp;=&nbsp;locations.iterator();<br />
while&nbsp;(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;Location&nbsp;location&nbsp;=&nbsp;(Location)it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;zipCode&nbsp;=&nbsp;location.getAddress().getZipCode();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(zipCode.equals("90210")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;=&nbsp;location.getAddress();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Lang<br />
<a href="http://jakarta.apache.org/commons/lang/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/lang/</a><br />
说明：这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils,&nbsp;StringEscapeUtils,&nbsp;RandomStringUtils,&nbsp;Tokenizer,&nbsp;WordUtils等工具类。<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Logging<br />
<a href="http://jakarta.apache.org/commons/logging/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/logging/</a><br />
说明：你知道Log4j吗？<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Math<br />
<a href="http://jakarta.apache.org/commons/math/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/math/</a><br />
说明：看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和<span class="hilite2">Common</span>s&nbsp;Lang重复了，但是这个包更专注于做数学工具，功能更强大。<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Net<br />
<a href="http://jakarta.apache.org/commons/net/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/net/</a><br />
说明：这个包还是很实用的，封装了很多网络协议。<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;FTP<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;NNTP<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;SMTP<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;POP3<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;Telnet<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;TFTP<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;Finger<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Whois<br />
9.&nbsp;&nbsp;&nbsp;&nbsp;rexec/rcmd/rlogin<br />
10.&nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;(rdate)&nbsp;and&nbsp;Daytime<br />
11.&nbsp;&nbsp;&nbsp;&nbsp;Echo<br />
12.&nbsp;&nbsp;&nbsp;&nbsp;Discard<br />
13.&nbsp;&nbsp;&nbsp;&nbsp;NTP/SNTP<br />
使用示例：<br />
TelnetClient&nbsp;telnet&nbsp;=&nbsp;new&nbsp;TelnetClient();<br />
telnet.connect(&nbsp;"192.168.1.99",&nbsp;23&nbsp;);<br />
InputStream&nbsp;in&nbsp;=&nbsp;telnet.getInputStream();<br />
PrintStream&nbsp;out&nbsp;=&nbsp;new&nbsp;PrintStream(&nbsp;telnet.getOutputStream()&nbsp;);<br />
...<br />
telnet.close();<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Validator<br />
<a href="http://jakarta.apache.org/commons/validator/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/validator/</a><br />
说明：用来帮助进行验证的工具。比如验证Email字符串，日期字符串等是否合法。<br />
使用示例：<br />
//&nbsp;Get&nbsp;the&nbsp;Date&nbsp;validator<br />
DateValidator&nbsp;validator&nbsp;=&nbsp;DateValidator.getInstance();<br />
//&nbsp;Validate/Convert&nbsp;the&nbsp;date<br />
Date&nbsp;fooDate&nbsp;=&nbsp;validator.validate(fooString,&nbsp;"dd/MM/yyyy");<br />
if&nbsp;(fooDate&nbsp;==&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;error...not&nbsp;a&nbsp;valid&nbsp;date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
}<br />
<br />
<span class="hilite2">Common</span>s&nbsp;Virtual&nbsp;File&nbsp;System<br />
<a href="http://jakarta.apache.org/commons/vfs/" target="_blank">http://jakarta.<span class="hilite1">apache</span>.org/<span class="hilite2">common</span>s/vfs/</a><br />
说明：提供对各种资源的访问接口。支持的资源类型包括<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;CIFS&nbsp;<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;FTP&nbsp;<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;Local&nbsp;Files&nbsp;<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;HTTP&nbsp;and&nbsp;HTTPS&nbsp;<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;SFTP&nbsp;<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;Temporary&nbsp;Files&nbsp;<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;WebDAV&nbsp;<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Zip,&nbsp;Jar&nbsp;and&nbsp;Tar&nbsp;(uncompressed,&nbsp;tgz&nbsp;or&nbsp;tbz2)&nbsp;<br />
9.&nbsp;&nbsp;&nbsp;&nbsp;gzip&nbsp;and&nbsp;bzip2&nbsp;<br />
10.&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;<br />
11.&nbsp;&nbsp;&nbsp;&nbsp;ram&nbsp;<br />
这个包的功能很强大，极大的简化了程序对资源的访问。<br />
使用示例：<br />
从jar中读取文件<br />
//&nbsp;Locate&nbsp;the&nbsp;Jar&nbsp;file<br />
FileSystemManager&nbsp;fsManager&nbsp;=&nbsp;VFS.getManager();<br />
FileObject&nbsp;jarFile&nbsp;=&nbsp;fsManager.resolveFile(&nbsp;"jar:lib/aJarFile.jar"&nbsp;);<br />
<br />
//&nbsp;List&nbsp;the&nbsp;children&nbsp;of&nbsp;the&nbsp;Jar&nbsp;file<br />
FileObject[]&nbsp;children&nbsp;=&nbsp;jarFile.getChildren();<br />
System.out.println(&nbsp;"Children&nbsp;of&nbsp;"&nbsp;+&nbsp;jarFile.getName().getURI()&nbsp;);<br />
for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;children.length;&nbsp;i++&nbsp;)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;children[&nbsp;i&nbsp;].getName().getBaseName()&nbsp;);<br />
}<br />
从smb读取文件<br />
StaticUserAuthenticator&nbsp;auth&nbsp;=&nbsp;new&nbsp;StaticUserAuthenticator("username",&nbsp;"password",&nbsp;null);<br />
FileSystemOptions&nbsp;opts&nbsp;=&nbsp;new&nbsp;FileSystemOptions();<br />
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts,&nbsp;auth);&nbsp;<br />
FileObject&nbsp;fo&nbsp;=&nbsp;VFS.getManager().resolveFile("smb://host/anyshare/dir",&nbsp;opts);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
有人说<span class="hilite1">Apache</span>就像是丐帮，里面的项目多而杂。的确如此，<span class="hilite1">Apache</span>的项目水平参差不齐，而且不同的项目之间也常常会有功能重叠，甚至有撞车，比如Ant和Maven。不过<span class="hilite1">Apache</span>的优秀项目还是有很多的，比如<span class="hilite1">Apache</span>&nbsp;Http&nbsp;Server，Tomcat，Ant,&nbsp;Geronimo等等。<span class="hilite1">Apache</span>&nbsp;<span class="hilite2">Common</span>s是工具包，为其他项目提供支持，很多<span class="hilite2">Common</span>s中的项目就是从其他项目中抽取出来的。希望我的介绍能对你有所帮助，有些我提到的<span class="hilite2">Common</span>s中的项目我也没有用过，只是现学现卖，难免错误和疏漏，希望谅解。</p>
<img src ="http://www.blogjava.net/martinyuan/aggbug/172278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martinyuan/" target="_blank">Martin Yuan</a> 2008-01-02 18:26 <a href="http://www.blogjava.net/martinyuan/articles/172278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>