﻿<?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-TNT blog-文章分类-apache</title><link>http://www.blogjava.net/terrywu/category/11707.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 28 Jun 2007 17:34:50 GMT</lastBuildDate><pubDate>Thu, 28 Jun 2007 17:34:50 GMT</pubDate><ttl>60</ttl><item><title>简介Lucene2.0中Query</title><link>http://www.blogjava.net/terrywu/articles/126628.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Wed, 27 Jun 2007 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/126628.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/126628.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/126628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/126628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/126628.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px;">
<p>基本流程<br>
1、&nbsp;初始化IndexSearcher :Searcher searcher = new IndexSearcher(indexDir);//indexDir为索引存放路径<br>
2、&nbsp;生成Query对象: QueryParser类的parse()方法返回Query类形对象<br>
3、&nbsp;使用search(Query)方法，开始搜索，并返回Hits对象<br>
4、&nbsp;使用Hits对象的方法检索结果:<br>
length();//结果总数量<br>
doc(int n);//返回第n个文档;Document对象<br>
id(int n);//第n个文档的内部ID<br>
score(n);//第n个文档的分值，用于排序</p>
<p>例子:<br>
IndexSearcher searcher = new IndexSearcher(&#8220;c:\\index&#8221;);<br>
Query query = QueryParser.parse(&#8220;key1&#8221;,&#8221;name&#8221;,new StandardAnalyzer());<br>
Hits hits = searcher.search(query);<br>
If(hits.length()==0){<br>
&nbsp;Out.println(&#8220;not found&#8221;);<br>
}<br>
else{<br>
&nbsp;for(int i=0;i &nbsp;Document d&nbsp; = hits.doc(i);<br>
&nbsp;Out.println(d.get(&#8220;title&#8221;));<br>
}<br>
}</p>
<p>文档搜索结果的主要排序依据是文档的分值。改变文档分值的方法是建立索引时，在初始化Document对象后，使用Document的setBoost方法来改变文档的boost因子（分值的倍数）:<br>
Document doc = new Document();<br>
Doc.add(Field.Text(&#8220;contents&#8221;,&#8221;text1 text2&#8221;));<br>
Doc.setBoost(1.5f); //改变因子，如0.3f,1.0f等</p>
<p>构建Query:<br>
Query是search包中的一个抽象类，它有许多子类，代表不同类形的查询<br>
<strong> </strong> </p>
<p><strong> 关键字TermQuery</strong> <br>
Term term = new Term(&#8220;contents&#8221;,&#8221;java&#8221;);//实质也是一个键/值对<br>
//构造TermQuery<br>
Query query = new TermQuery(term);<br>
<strong> </strong> </p>
<p><strong> 组合查询BooleanQuery</strong> <br>
BooleanQuery是一个查询容器，提供专门的方法往其中加入查询，并标明条件的关系<br>
IndexSearcher searcher = new IndexSearcher(&#8220;c:\\index&#8221;);<br>
Query q1 = new TermQuery(new Term(&#8220;name&#8221;,&#8221;tim&#8221;));<br>
Query q2 = new TermQuery(new Term(&#8220;name&#8221;,&#8221;fly&#8221;));<br>
//构造容器<br>
Query query = new BooleanQuery();<br>
query.add(q1,true,false);<br>
query..add(q2,true,false);<br>
Hits hits = searcher.search(query);</p>
<p>BooleanQuery的add方法的第二，第三参数说明：第二参数表示是否必须满足，第三参数表示是否不需要满足，组合一起有以下三种情况:<br>
True,false:当前查询条件是必须要满足的<br>
False ,true:当前查询是不可以满足的<br>
False,false:条件是可选的<br>
True,true:这种情况是错误的<br>
以上表明，上述例子的两个条件都是必须满足的，是&#8220;与(and)&#8221;的关系<br>
如果查进行&#8220;或（or）&#8221;运算，相应地可改为:<br>
query.add(q1,false,false);<br>
query.add(q2,false,false)</p>
<p><strong> 范围搜索RangeQuery</strong> <br>
RangeQuery query = new RangeQuery(begin,end,included);//最后参数为是否包含边界<br>
例:<br>
Term begin = new Term(&#8220;time&#8221;,&#8221;20050101&#8221;);<br>
Term end = new Term(&#8220;time&#8221;,&#8221;20050202&#8221;);<br>
RangeQuery query = new RangeQuery(begin,end,false);</p>
<p><strong> 前缀PrefixQuery</strong> <br>
PrefixQuery query = new PrefixQuery(new Term(&#8220;name&#8221;,&#8221;ti&#8221;));//name字段中以ti开头</p>
<p><strong> 多关键字PhraseQuery</strong> <br>
PhraseQuery query = new PhraseQuery();<br>
Query.add(new Term(&#8220;content&#8221;,&#8221;hello&#8221;));<br>
Query.add(new Term(&#8220;content&#8221;,&#8221;world&#8221;));<br>
Query.setSlop(2);<br>
&nbsp;//设置以上加上的两个关键字坡度,此值代表两个关键字之间无关词的个数.对于两个紧连的关键字，无论将坡度设为多少都能找到，如果两个词不紧连，且坡度值小于它们之间的无关词的数量，则无法找到</p>
<p><strong> 短词缀PhrasePrefixQuery</strong> <br>
Term word1 = new Term(&#8220;content&#8221;,&#8221;david&#8221;);<br>
Term word2 = new Term(&#8220;content&#8221;,&#8221;mary&#8221;);<br>
Term word3 = new Term(&#8220;content&#8221;,&#8221;robert&#8221;);<br>
PhrasePrefixQuery query = new PhrasePrefixQuery();<br>
//加入不确定的词<br>
Query.add(new Term[]{word1,word2});//不确定，第一个关键词在Term数组中产生<br>
//加入确定的词<br>
query.add(word3);<br>
query.setSlop(2);//设置坡度<br>
//以上查询中，david robert和mary robert都会出现在查询结果,同样地，mary and robert也会被击中</p>
<p><strong> 相近词FuzzyQuery</strong> <br>
FuzzyQuery query = new FuzzyQuery(new Term(&#8220;content&#8221;,&#8221;david&#8221;));</p>
<p><strong> 通配符WildcardQuery</strong> <br>
WildcardQuery query = new WildcardQuery(new Term(&#8220;content&#8221;,&#8221;*im&#8221;));<br>
WildcardQuery query = new WildcardQuery(new Term(&#8220;content&#8221;,&#8221;t?m??&#8221;));<br>
//*代表0个或多个字符，？一个字符</p>
<p>QueryParser类,把用户各种输入转为Query<br>
Query query = QueryParser.parse(keywords,filedName,new StandardAnalyer());<br>
关键字格式:<br>
&#8220;tim&#8221; //在默认字段搜索tim<br>
&#8220;name:tim&#8221;;//在name字段搜tim<br>
&#8220;tim wong&#8221;或tim or wong;//在默认字段搜搜关键字tim 或wong<br>
&#8220;+tim +wong&#8221;或&#8221;tim and wong&#8221; //搜索tim和 wong<br>
&#8221;tim*&#8221;//在默认字段中搜前缀为tim的<br>
&#8220;name:tim is a programer&#8221;;//在name字段中包含短语tim is a programer<br>
&#8220;(tim or wong) and php&#8221; //在默认字段中搜含有tim 或wong的关键字，但一定要包含php<br>
&#8220;name:tim &#8211;title:php&#8221; //name字段搜tim,并且title不含有php</p>
<p>另外，QueryParser构造时需要一个分析器，它应该与建立索引时的分析器一样</p>
<p>QueryParser的&#8220;与&#8221;和&#8220;或&#8221;<br>
当输入两个关键字时，默认关系是或，要改变这种关系，方法是:<br>
QueryParser parser = new QueryParser(keyword,fieldNmae,new StandardAnalyzer());<br>
Parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);</p>
<p>&nbsp;</p>
<p><strong> <font color="#000066" size="2">排序及多字段查找</font></strong> </p>
<p>默认情况下,IndexSearcher类的search方法返回查询结果时,是按文档的分值排序的,可以使用重载的search方法对结果排序</p>
<p>IndexSearcher.search(Query,Sort);</p>
<p>new Sort() 和 Sort.RELEVANCE,以及null一样,采用默认排序,要定义排序字段,方法是将字段传入Sort对象</p>
<p>Sort sort = new Sort(String field);</p>
<p>也可以对多个字段排序Sort sort = new Sort(String[] fields); </p>
<p>例:</p>
<p>Sort sort = new Sort(new SortField[]{new SortField(&#8220;title&#8221;),new SortField(&#8220;name&#8221;)});</p>
<p>Hits hits=searcher.search(query,Sort);</p>
<p>&nbsp;</p>
<p><strong> 多字段查找MultiFieldQueryParser</strong> </p>
<p>只在某些Term中查找,不关心在哪个字段</p>
<p>Query query = new MultiFieldQueryParser.parse(&#8220;word&#8221;,new String[]{&#8220;title&#8221;,&#8221;content&#8221;},analyzer); //在title和content中找word</p>
<p>多字段时默认是OR关系,要改变它,使用以下方法:</p>
<p>Query query = MultiFieldQueryParser.parse(&#8220;word&#8221;,new
String[]{&#8220;title&#8221;,&#8221;content&#8221;},new
int[]{MultiFieldQueryParser.REQUIRED_FIELD,MultiFieldQueryParser.PROHIBITED_FIELD},analyzer);</p>
<p>其中:</p>
<p>REQUIRED_FIELD 表示该条件必须有</p>
<p>PROHIBITED_FIELD 表示必须不含</p>
<p>&nbsp;</p>
<p>搜<strong> 索多个索引文件MultiSearcher</strong> </p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立多个索引:使用不同的索引目录,实例化不同的IndexWriter</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立多索引搜索器:</p>
<p>Searcher[] searchers = new SEARCHER[2];</p>
<p>Searchers[0] = new IndexSearcher(dir1); //搜索索引目录一</p>
<p>Searchers[1]= new IndexSearcher(dir2);//搜索索引目录二</p>
<p>Searcher searcher = new MultiSearcher(serarchers);</p>
<p>3) 开始查询:Hits hits = searcher.search(query);<br>
</p>
<p><br>
</p>
</div>
<br><img src ="http://www.blogjava.net/terrywu/aggbug/126628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2007-06-27 16:52 <a href="http://www.blogjava.net/terrywu/articles/126628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 关于   lucene2.0   的创建、检索和删除功能的完整实现</title><link>http://www.blogjava.net/terrywu/articles/126534.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Wed, 27 Jun 2007 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/126534.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/126534.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/126534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/126534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/126534.html</trackback:ping><description><![CDATA[<strong>&nbsp;
<p>
<strong>				最近要做一个站内的全文检索功能，主要是针对
clob
字段的，于是去网上找了点
lucene
的资料，现在新版本的是
2.0.0
，网上的例子多是
1.4.3
的，有些方法已经废弃了，搞了
n
久终于把
2.0.0
的功能实现了，呵呵，下面把实现的代码贴出来，实现了索引的创建、检索和删除功能，并可以从检索结果去查询数据库
~ &nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;
&nbsp;
<strong>
//
</strong>
<strong>
创建索引
</strong>
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;public void indexFiles() {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;//
创建索引文件存放路径
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;File indexDir = new File("E:\\lucene_Learning\\lucene-
</strong></p>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;try {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date start = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;//
创建分析器
,
主要用于从文本中抽取那些需要建立索引的内容
,
把不需要参与建索引的文本内容去掉
.
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;//
比如去掉一些
a the
之类的常用词
,
还有决定是否大小写敏感
.
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
参数
true
用于确定是否覆盖原有索引的
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;IndexWriter indexWriter = new IndexWriter(indexDir, standardAnalyzer, true);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;indexWriter.setMergeFactor(100);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;indexWriter.setMaxBufferedDocs(100);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
只索引这个
Field
的前
5000
个字，默认为
10000
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;indexWriter.setMaxFieldLength(5000);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;//
从数据库取出所有纪录
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;List articleList = articleManager.getArticles(null);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;for (int i = 0; i &lt; articleList.size(); i++) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Article article = (Article) articleList.get(i);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
在
Document
方法是创建索引的具体代码
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Document doc = Document(article);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;indexWriter.addDocument(doc);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
// Optimize
的过程就是要减少剩下的
Segment
的数量
,
尽量让它们处于一个文件中
.
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;indexWriter.optimize();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;
&nbsp;indexWriter.close();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date end = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println("create index: " + (end.getTime() - start.getTime()) + " total milliseconds");
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (IOException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;public static Document Document(Article article)
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;throws java.io.IOException {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Document doc = new Document();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
为
article
表的主健创建索引，关于
Field
的几个参数下面有详细解释
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Field fieldId = new Field("uid", article.getArticleId(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.YES);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
为
detail
字段创建索引，
detail
在
DB
中是
clob
字段，内容为
html
文本
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String contentHtml = article.getDetail();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Reader read = new StringReader(contentHtml);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;
&nbsp;//
用
HTMLParser
把
detail
字段中的
HTML
分析成文本在索引
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;// HTMLParser
这个类可以在
lucene
的
demo
中找到
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;HTMLParser htmlParser = new HTMLParser(read);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;BufferedReader breader = new BufferedReader(htmlParser.getReader());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String htmlContent ="";
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String tempContent = breader.readLine();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;while (tempContent != null &amp;&amp; tempContent.length() &gt; 0) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;htmlContent = htmlContent + tempContent;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;tempContent = breader.readLine();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Field fieldContents = new Field("content", htmlContent,
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Field.Store.COMPRESS, Field.Index.TOKENIZED,Field.TermVector.YES);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;// db
中的每条纪录对应一个
doc
，每个字段对应一个
field
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;doc.add(fieldId);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;doc.add(fieldContents);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;return doc;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;
&nbsp;
<strong>
&nbsp;//
</strong>
<strong>
搜索文件，
</strong>
<strong>
keyword
</strong>
<strong>
是你在页面上输入的查找关键字，这里查找的是
</strong>
<strong>
detail
</strong>
<strong>
字段
</strong>
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;public List searchFiles(String keyword){
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String index = "E:\\lucene_Learning\\lucene-
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
// hitsList
用来保存
db
的纪录，这些纪录可以通过查询结果取到
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;List hitsList = new ArrayList();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;try {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date start = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;IndexReader reader = IndexReader.open(index);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Searcher searcher = new IndexSearcher(reader);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Analyzer analyzer = new StandardAnalyzer();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;QueryParser parser = new QueryParser("content", analyzer);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
解析查询关键字，比如输入的是以空格等分开的多个查询关键字，这里解析后，可以多条件查询
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Query query = parser.parse(keyword);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
// hits
用来保存查询结果，这里的
hits
相当于
sql
中的
result
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Hits hits = searcher.search(query);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;for (int i = 0; i &lt; hits.length(); i++) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Document doc = hits.doc(i);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
获得
article
表的主健
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String id = doc.get("uid");
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;//
根据主健去
db
中取纪录，返回到
hitsList
中
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;try {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Article article = articleManager.getArticle(id);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (ObjectRetrievalFailureException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;article = null;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
&nbsp;
//
如果没有找到该纪录，表示该纪录已经不存在，不必添加到
hitsList
中
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;if(article!=null) &nbsp;hitsList.add(article);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;searcher.close();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;reader.close();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date end = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println("search files: " + (end.getTime() - start.getTime()) + " total milliseconds");
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (IOException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (ParseException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;return hitsList;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;
&nbsp;
<strong>
&nbsp;//
</strong>
<strong>
删除索引
</strong>
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;public void deleteIndex(){
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String index = "E:\\lucene_Learning\\lucene-
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;try {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date start = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;IndexReader reader = IndexReader.open(index);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;int numFiles = reader.numDocs();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;for (int i = 0; i &lt; numFiles; i++) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
//
这里的删除只是给文档做一个删除标记，你可以看到执行
deleteDocument
后会产生一个
del
后缀的文件，
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;//
用来记录这些标记过的文件
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;reader.deleteDocument(i);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;reader.close();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;Date end = new Date();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println("delete index: " + (end.getTime() - start.getTime()) + " total milliseconds");
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (IOException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;
&nbsp;
<strong>
&nbsp;//
</strong>
<strong>
恢复已删除的索引
</strong>
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;public void unDeleteIndex(){
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;String index = "E:\\lucene_Learning\\lucene-
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;try {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;IndexReader reader = IndexReader.open(index);
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;reader.undeleteAll();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;reader.close();
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;} catch (IOException e) {
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
</strong></p>
<strong>		</strong>
<p>
<strong>
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;}
</strong></p>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>				}
</strong></p>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>				Field
就像我们学过的数据库中的字段，简单的说，就是一个名值对。这个域有三种属性，分别是
</strong></p>
<strong>		</strong>
<p>
<strong>				isStored -
是否被存储
<br>isIndexed -
是否被索引
<br>isTokenized -
是否分词
</strong></p>
<strong>		</strong>
<p>
<strong>				这些属性的组合又构成了四种不同类型的
Field
，而且各有用途
</strong></p>
<strong>
</strong>
<table class="MsoNormalTable" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            &nbsp;
            </p>
            </td>
            <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext #d4d0c8; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Stored
            </p>
            </td>
            <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext #d4d0c8; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Indexed
            </p>
            </td>
            <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext #d4d0c8; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            Tokenized
            </p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none solid solid; border-color: #d4d0c8 windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Keyword
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Y
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Y
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            N
            </p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none solid solid; border-color: #d4d0c8 windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            UnIndexed
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            Y
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            N
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            N
            </p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none solid solid; border-color: #d4d0c8 windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            UnStored
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            N
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none solid solid; border-color: #d4d0c8 windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Text: String
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none solid solid; border-color: #d4d0c8 windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Text : Reader
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            N
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.35pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
            <td style="border-style: none solid solid none; border-color: #d4d0c8 windowtext windowtext #d4d0c8; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 62.4pt; background-color: transparent;" valign="top" width="83">
            <p>
            <strong>
            Y
            </strong>
            </p>
            </td>
        </tr>
    </tbody>
</table>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>				关于
Field
，
2.0.0
版本和
1.4.3
版本方法相比改动比较大，具体见下表
</strong></p>
<strong>		</strong>
<p>
<strong>				&nbsp;
</strong></p>
<strong>		</strong>
<p>
<strong>
1.4.3
版本中的下面方法都被
Field(String name, String value, Store store, Index index, TermVector termVector)
取代
</strong></p>
<strong>		</strong>
<p>
<strong>				Keyword(String name, String value) <strong>// only version
存储、索引、不分词，用于
URI
（比如
MSN
聊天记录的日期域、比如
MP3
文件的文件全路径等等）
<br>Field(String name, String value, <strong>Field.Store.YES, Field.Index.UN_TOKENIZED</strong>)<strong> // version 2.0.0</strong>
</strong></strong></p>
<strong><strong>		</strong></strong>
<p>
<strong><strong>				UnIndexed(String name, String value)<strong> // only version
存储、不索引、不分词，比如文件的全路径
<br>Field(String name, String value,<strong>Field.Store.YES, Field.Index.NO</strong>)<strong>// version 2.0.0</strong>
</strong></strong></strong></p>
<strong><strong><strong>		</strong></strong></strong>
<p>
<strong><strong><strong>				UnStored(String name, String value)<strong> // only version
不存储、索引、分词，比如
HTML
的正文、
Word
的内容等等，这部分内容是要被索引的，但是由于具体内容通常很大，没有必要再进行存储，可以到时候根据
URI
再来挖取。所以，这部分只分词、索引，而不存储。
<br>Field(String name, String value,<strong>Field.Store.YES, Field.Index.TOKENIZED</strong>)<strong>// version 2.0.0</strong>
</strong></strong></strong></strong></p>
<strong><strong><strong><strong>		</strong></strong></strong></strong>
<p>
<strong><strong><strong><strong>				Text(String name, String value)<strong> // only version
存储、索引、分词，比如文件的各种属性，比如
MP3
文件的歌手、专辑等等。
<strong>
Field.Store.YES,
</strong>
Field(String name, String value,<strong>Field.Index.TOKENIZED</strong>)<strong>// version 2.0.0</strong>
</strong></strong></strong></strong></strong></p>
<strong><strong><strong><strong><strong>		</strong></strong></strong></strong></strong>
<p>
<strong><strong><strong><strong><strong>				Text(String name, Reader value) <strong>// only version
</strong></strong></strong></strong></strong></strong></p>
<strong><strong><strong><strong><strong><strong>
<strong>
Field(String name, Reader reader)
</strong>
&nbsp;
<strong>
// version
</strong>
<br>
不存储、索引、分词。
</strong></strong></strong></strong></strong></strong></strong><br><img src ="http://www.blogjava.net/terrywu/aggbug/126534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2007-06-27 11:37 <a href="http://www.blogjava.net/terrywu/articles/126534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Jakarta Common Lang 介绍 </title><link>http://www.blogjava.net/terrywu/articles/49491.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49491.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49491.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49491.html</trackback:ping><description><![CDATA[
		<p>　　无论你在开发哪中 Java 应用程序，都免不了要写很多工具类/工具函数。你可知道，有很多现成的工具类可用，并且代码质量都很不错，不用你写，不用你调试，只要你发现。<br />　　在 Apache Jakarta Common 中， Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的，几乎你所知道的名气比较大的软件里面都有用到它，包括 Tomcat, Weblogic, Websphere, Eclipse 等等。我们就从这个包开始介绍整个 common 项目。<br />　　Lang 中最大的也是最常用的类是 StringUtils， StringUtils 最常用的函数是 isEmpty。这里举一个例子让你熟悉一下：</p>
		<p>　　String str = null;</p>
		<p>　　if(StringUtils.isEmpty(str)){</p>
		<p>　　}</p>
		<p>　　str = StringUtils.lowerCase(str);<br />　　str = StringUtils.capitalize(str);<br />　　str = StringUtils.swapCase(str);<br />　　StringUtils.isNumeric(str);<br />　　StringUtils.isAsciiPrintable(str);<br />　　StringUtils.equalsIgnoreCase(str,"");</p>
		<p>　　其中，<br />　　if(StringUtils.isEmpty(str)){</p>
		<p>　　}<br />　　相当于<br />　　if(str == null || str.length() == 0){</p>
		<p>　　}</p>
		<p>
				<br />　　从以上代码可以看出这个工具类的特点：<br />　　第一、这些函数都是静态函数，并且很少抛出异常，也很少抛出控制针异常。<br />　　第二、这些函数的功能大多是增强标准 Java 中 java.lang.String 类的功能。</p>
		<p>　　其实，整个 lang 包的函数基本上都在增强 java.lang 包的功能。一个有趣的设计是，虽然 StringUtils 里面的函数都是静态函数，按照通常的做法，会把构造函数设计成 private, 但是不！StringUtils 的构造函数是 public 的。构造函数里面的注释写着 "no init"。这就有意思了，你可以 new 一个 StringUtils，虽然没有特别的好处，但是也没有特别的坏处；你可以写一个 StringUtils 的子类，虽然这也不太常见。这里面的思想似乎是，使用这个工具包的软件开发人员想怎么用就怎么用，做工具类的时候不用太多限制。<br />　　至于不抛异常是因为现在很多人已经意识到 Java 中的异常不是什么好东西，如果不用异常也能写程序，为什么还要用异常？用了异常就要写很多 try catch，在很多场合，比如 jdbc driver，这已经证明了会使代码量增加并且代码的可读性变差。<br />　　这里的思路会不会影响大家写程序的习惯呢？</p>
		<p>　　StringUtils 的函数很多，不一一列举。 Lang 中次重要的类要数 ArrayUtils，主要功能涉及到数组的比较、转换、拆分、合并、查找、增减、倒转等等操作。在 JDK 中，这类操作没有现成的函数。</p>
		<p>　　Lang 中工具类比较多，这里介绍几个主要的：<br />　　ClassUtils getShortClassName，这个函数应该在 java.lang.Class 类中有的，我看到很多人自己写这个函数。getAllInterfaces，convertClassNamesToClasses，isAssignable，primitivesToWrappers，isInnerClass。<br />　　NumberUtils 关于数字以及数字和字符串转换的类 stringToInt，toDouble，createNumber，isAllZeros， int compare(float lhs, float rhs)， isNumber(String str)，double min(double[] array)。<br />　　RandomUtils 用于产生随机数的。<br />　　DateFormatUtils 日期时间格式转换，以及本地时间和 UTC 时间转换。<br />　　DateUtils 日期工具类。isSameDay，truncate，round，modify。</p>
		<p>　　基于反射机制的几个类：<br />　　CompareToBuilder 比较，用在算法、排序、比较的地方。reflectionCompare，append。<br />　　EqualsBuilder 通过反射机制比较。reflectionEquals 很多项目中用到。<br />　　HashCodeBuilder 可以通过反射生成 hash code，很多算法的地方涉及到 hash code，但是并不是每个人都知道一种 hash code 的生成方法。 <br />　　ToStringBuilder 当你需要重载 toString 函数而不想写代码把当前类的所有成员信息列出来，可以用这个函数。</p>
		<p>　　其它的几个类我用得比较少：<br />　　SerializationUtils Java 中得序列化比较奥妙，容易出错啊。<br />　　SystemUtils 可以读取一些关于 jdk 信息，操作系统信息的工具类。</p>
<img src ="http://www.blogjava.net/terrywu/aggbug/49491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 11:15 <a href="http://www.blogjava.net/terrywu/articles/49491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jakarta-Common-BeanUtils使用笔记- - - </title><link>http://www.blogjava.net/terrywu/articles/49490.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49490.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49490.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49490.html</trackback:ping><description><![CDATA[
		<p class="1" style="MARGIN: 17pt 0cm 16.5pt 21.25pt">
				<a name="_Toc93765167">
						<span lang="EN-US">
								<span>
										<strong>
												<font size="6">1.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">   </span>
								</span>
						</span>
						<span style="FONT-FAMILY: 宋体">
								<strong>
										<font size="6">概述</font>
								</strong>
						</span>
				</a>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">第一次接触</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">是在学习</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体">的过程中，在</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体">中它被大量用于处理</span>
				<span lang="EN-US">FormBean</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">主要提供了对于</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">进行各种操作，</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">一共分</span>
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体">个包：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings">
						<span>Ø<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">org.apache.commons.beanutils</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings">
						<span>Ø<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">org.apache.commons.beanutils.converters</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings">
						<span>Ø<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">org.apache.commons.beanutils.locale</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings">
						<span>Ø<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">         </span></span>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">org.apache.commons.beanutils.locale.converters</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt">
				<span style="FONT-FAMILY: 宋体">其中上面两个是</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">的默认实现，它没有针对本地化的任何处理，这个可以提高执行效率。但是若你的程序对于本地化有要求的话，那还是使用下面</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">2</span>
				<span style="FONT-FAMILY: 宋体">个包比较安全。</span>
				<span lang="EN-US" style="FONT-FAMILY: Helvetica">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="1" style="MARGIN: 17pt 0cm 16.5pt 21.25pt">
				<a name="_Toc93765168">
						<span lang="EN-US">
								<span>
										<strong>
												<font size="6">2.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">   </span>
								</span>
						</span>
						<span lang="EN-US">
								<strong>
										<font size="6">org.apache.commons.beanutils</font>
								</strong>
						</span>
				</a>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">这个包主要提供用于操作</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">的工具类，</span>
				<span lang="EN-US" style="FONT-FAMILY: 宋体">Jakarta-Common-BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">的主要功能都在这个包里实现。<span lang="EN-US"></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 宋体">
						<span>    </span>
				</span>
				<span style="FONT-FAMILY: 宋体">下面分别介绍几个主要的工具类：</span>
		</p>
		<p class="2" style="MARGIN: 13pt 0cm 13pt 1cm">
				<a name="_Toc93765169">
						<span lang="EN-US">
								<span>
										<strong>
												<font face="Arial" size="5">2.1.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">
										</span>
								</span>
						</span>
						<span lang="EN-US">
								<strong>
										<font face="Arial" size="5">BeanUtil</font>
								</strong>
						</span>
				</a>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体">、首先，我先定义一个</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">作为之后例子的操作对象。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">    public class Company</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">    {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private String name;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private HashMap address = new HashMap();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private String[] otherInfo;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private ArrayList product;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private ArrayList employee;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>private HashMap telephone;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public Company(){}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public String getName()</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return name;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setName(String name)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.name = name;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public String getAddress(String type)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return address.get(type).toString();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setAddress(String type, String address)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.address.put(type,address);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public String[] getOtherInfo()</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return otherInfo;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setOtherInfo(String[] otherInfo)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.otherInfo = otherInfo;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public ArrayList getProduct()</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return product;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setProduct(ArrayList product)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.product = product;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public ArrayList getEmployee()</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return employee;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setEmployee(ArrayList employee)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.employee = employee;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public HashMap getTelephone()</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>return telephone;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>public void setTelephone(HashMap telephone)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>{</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>this.telephone = telephone;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">    }</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">可以直接</span>
				<span lang="EN-US">get</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">set</span>
				<span style="FONT-FAMILY: 宋体">一个属性的值。它将</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">分成</span>
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体">种类型：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>Simple</span>
				<span style="FONT-FAMILY: 宋体">——简单类型，如</span>
				<span lang="EN-US">Stirng</span>
				<span style="FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US">Int</span>
				<span style="FONT-FAMILY: 宋体">……</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>Indexed</span>
				<span style="FONT-FAMILY: 宋体">——索引类型，如</span>
				<span style="FONT-FAMILY: 宋体">数组、</span>
				<span lang="EN-US">arrayList</span>
				<span style="FONT-FAMILY: 宋体">……</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>Maped</span>
				<span style="FONT-FAMILY: 宋体">——这个不用说也该知道，就是指</span>
				<span lang="EN-US">Map</span>
				<span style="FONT-FAMILY: 宋体">啦，比如</span>
				<span lang="EN-US">HashMap</span>
				<span style="FONT-FAMILY: 宋体">……</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">访问不同类型的数据可以直接调用函数</span>
				<span lang="EN-US">getProperty</span>
				<span style="FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US">setProperty</span>
				<span style="FONT-FAMILY: 宋体">。它们都只有</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体">个参数，第一个是</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">对象，第二个是要操作的属性名。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">Company c = new Company();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">c.setName("Simple");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体">对于</span>
				<span lang="EN-US">Simple</span>
				<span style="FONT-FAMILY: 宋体">类型，参数二直接是属性名即可</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="COLOR: green">//Simple</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
						<span style="COLOR: rgb(51,102,255)">System.out.println(BeanUtils.getProperty(c, "name"));</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: green">
						<span>    </span>
				</span>
				<span style="FONT-FAMILY: 宋体">对于</span>
				<span lang="EN-US">Map</span>
				<span style="FONT-FAMILY: 宋体">类型，则需要以“属性名（</span>
				<span lang="EN-US">key</span>
				<span style="FONT-FAMILY: 宋体">值）”的形式</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: green">//Map</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
						<span style="COLOR: rgb(51,102,255)">System.out.println(BeanUtils.getProperty(c, "address (A2)"));</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>HashMap am = new HashMap();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>am.put("1","234-222-1222211");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>am.put("2","021-086-1232323");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>BeanUtils.setProperty(c,"telephone",am);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>System.out.println(BeanUtils.getProperty(c, "telephone (2)"));</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
				</span>
				<span style="FONT-FAMILY: 宋体">对于</span>
				<span lang="EN-US">Indexed</span>
				<span style="FONT-FAMILY: 宋体">，则为“属性名</span>
				<span lang="EN-US">[</span>
				<span style="FONT-FAMILY: 宋体">索引值</span>
				<span lang="EN-US">]</span>
				<span style="FONT-FAMILY: 宋体">”，注意这里对于</span>
				<span lang="EN-US">ArrayList</span>
				<span style="FONT-FAMILY: 宋体">和数组都可以用一样的方式进行操作。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: green">//index</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
						<span style="COLOR: rgb(51,102,255)">System.out.println(BeanUtils.getProperty(c, "otherInfo[2]"));</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>BeanUtils.setProperty(c, "product[1]", "NOTES SERVER");</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>    </span>System.out.println(BeanUtils.getProperty(c, "product[1]"));</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">当然这</span>
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体">种类也可以组合使用啦！</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
						<span style="COLOR: green">//nest</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
						<span style="COLOR: rgb(51,102,255)">System.out.println(BeanUtils.getProperty(c, "employee[1].name"));</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体">、此外，还有一个很重要的方法</span>
				<span lang="EN-US">copyProperty</span>
				<span style="FONT-FAMILY: 宋体">，可以直接进行</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">之间的</span>
				<span lang="EN-US">clone</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
						<span style="COLOR: rgb(51,102,255)">Company c2 = new Company();</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>        </span>BeanUtils.copyProperties(c2, c);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">但是这种</span>
				<span lang="EN-US">copy</span>
				<span style="FONT-FAMILY: 宋体">都是浅拷贝，复制后的</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体">个</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">的同一个属性可能拥有同一个对象的</span>
				<span lang="EN-US">ref</span>
				<span style="FONT-FAMILY: 宋体">，这个在使用时要小心，特别是对于属性为自定义类的情况。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体">、最后还有</span>
				<span lang="EN-US">populate</span>
				<span style="FONT-FAMILY: 宋体">，它用于将一个</span>
				<span lang="EN-US">map</span>
				<span style="FONT-FAMILY: 宋体">的值填充到一个</span>
				<span lang="EN-US">bean</span>
				<span style="FONT-FAMILY: 宋体">中，其函数原型如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; TEXT-ALIGN: left" align="left">
				<span lang="EN-US" style="COLOR: rgb(51,102,255); FONT-FAMILY: 宋体">public void <font color="#3366ff"><b>populate</b>(java.lang.Object bean,</font></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; TEXT-ALIGN: left" align="left">
				<span lang="EN-US" style="COLOR: rgb(51,102,255); FONT-FAMILY: 宋体">
						<span>                </span>java.util.Map properties)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left">
				<span lang="EN-US" style="COLOR: rgb(51,102,255); FONT-FAMILY: 宋体">
						<span>              </span>throws java.lang.IllegalAccessException,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255); FONT-FAMILY: 宋体">
						<span>                     </span>java.lang.reflect.InvocationTargetException</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体">在</span>
				<span lang="EN-US">struts</span>
				<span style="FONT-FAMILY: 宋体">中这个函数被用于从</span>
				<span lang="EN-US">http request</span>
				<span style="FONT-FAMILY: 宋体">中取得参数添加到</span>
				<span lang="EN-US">FormBean</span>
				<span style="FONT-FAMILY: 宋体">，目前好像我也没有看到这个函数还有什么其他的用途？！以后想到再说吧：</span>
				<span lang="EN-US">P</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="2" style="MARGIN: 13pt 0cm 13pt 1cm">
				<a name="_Toc93765170">
						<span lang="EN-US">
								<span>
										<strong>
												<font face="Arial" size="5">2.2.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">
										</span>
								</span>
						</span>
						<span lang="EN-US">
								<strong>
										<font face="Arial" size="5">LazyDynaBean</font>
								</strong>
						</span>
				</a>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">它实现一个动态的</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">，可以直接往里面加入属性，作为一个</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">一样使用，也可以用上面的</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">或</span>
				<span lang="EN-US">get/set</span>
				<span style="FONT-FAMILY: 宋体">方法进行操作，而不用事先定义一个标准的</span>
				<span lang="EN-US">JavaBean</span>
				<span style="FONT-FAMILY: 宋体">类啦：）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体">记得在</span>
				<span lang="EN-US">J2ee</span>
				<span style="FONT-FAMILY: 宋体">设计模式中有一种</span>
				<span lang="EN-US">Value Object</span>
				<span style="FONT-FAMILY: 宋体">的模式，用于在</span>
				<span lang="EN-US">MVC</span>
				<span style="FONT-FAMILY: 宋体">各层之间传递数据，避免直接传递大业务对象引起的性能问题，为了避免在项目中出现很多</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">类，在书中提供了一个动态</span>
				<span lang="EN-US">Value Object</span>
				<span style="FONT-FAMILY: 宋体">的实现（通过扩展</span>
				<span lang="EN-US">Map</span>
				<span style="FONT-FAMILY: 宋体">）。这里</span>
				<span lang="EN-US">LazyDynaBean</span>
				<span style="FONT-FAMILY: 宋体">则可以作为一种更加成熟、稳定的实现来使用。呵呵，原来曾打算自己写一个类似的</span>
				<span lang="EN-US">value object</span>
				<span style="FONT-FAMILY: 宋体">类的，现在看来可以直接用这个啦：</span>
				<span lang="EN-US">P</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">言归正传，</span>
				<span lang="EN-US">LazyBean</span>
				<span style="FONT-FAMILY: 宋体">的确提供了一个很不错的</span>
				<span lang="EN-US">DynaBean</span>
				<span style="FONT-FAMILY: 宋体">的实现。而且就像它的名字中表述的那样，它的确是为我这样的懒人考虑的很周到，用起来几乎不需要写什么多余的代码</span>
				<span lang="EN-US">^_^</span>
				<span style="FONT-FAMILY: 宋体">，下面就看看使用的例子吧！</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
						<span>  </span>
						<span style="COLOR: rgb(51,153,102)">//</span>
				</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">这里使用</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">LazyDynaMap</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">，它是</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">LazyBean</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">的一个轻量级实现</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>      </span>
						<span style="COLOR: rgb(51,102,255)">LazyDynaMap dynaBean1 = new LazyDynaMap();</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>      </span>
						<span style="COLOR: rgb(51,102,255)">dynaBean1.set("foo", "bar");<span>                  </span></span>
						<span style="COLOR: rgb(51,153,102)">// simple</span>
						<span style="COLOR: rgb(51,102,255)">
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>dynaBean1.set("customer", "title", "Mr");<span>     </span><span>   </span></span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">// mapped</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>dynaBean1.set("address", 0, "address1");<span>      </span><span>   </span></span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">// indexed</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println(dynaBean1.get("address",0));</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>Map myMap = dynaBean1.getMap();<span>           </span></span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">// retrieve the Map</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println(myMap.toString());</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">上面的例子可以看到，它可以在</span>
				<span lang="EN-US">set</span>
				<span style="FONT-FAMILY: 宋体">时自动增加</span>
				<span lang="EN-US">bean</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">（既赋值的同时增加</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">中的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">），同时也支持</span>
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体">中类型的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">，并且</span>
				<span lang="EN-US">LazyDynaMap</span>
				<span style="FONT-FAMILY: 宋体">还可以导出为</span>
				<span lang="EN-US">map</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">对于这个类还有两个重要的</span>
				<span lang="EN-US">Field</span>
				<span style="FONT-FAMILY: 宋体">要注意：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>returnnull</span>
				<span style="FONT-FAMILY: 宋体">——指定在</span>
				<span lang="EN-US">get</span>
				<span style="FONT-FAMILY: 宋体">方法使用了一个没有定义过的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">时，</span>
				<span lang="EN-US">DynaBean</span>
				<span style="FONT-FAMILY: 宋体">的行为。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
						<span>  </span>
						<span style="COLOR: rgb(51,153,102)">//</span>
				</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">取的字段的信息</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>      </span>
						<span style="COLOR: rgb(51,102,255)">dynaBean1.setReturnNull(true);</span>
						<span style="COLOR: rgb(51,153,102)">//</span>
				</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">设为</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">ture</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">。若</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">Bean</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">中没有此字段，返回</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">null</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
						<span>    </span>
						<span>                            </span>//</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">默认为</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">false</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">。若</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">Bean</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">中没有此字段，自动增加一个：）</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println(dynaBean1.get("aaa"));</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">此时返回</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">null</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>Restricted</span>
				<span style="FONT-FAMILY: 宋体">——指定是否允许改变这个</span>
				<span lang="EN-US">bean</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 31.5pt">
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//MutableDynaClass.setRestricted</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">设为</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">true</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">后，字段不可再增删和修改</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">.</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
						<span>      </span>//</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">默认为</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">false</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">，允许增删和修改</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>      </span>
						<span style="COLOR: rgb(51,102,255)">dynaBean1.setRestricted(true);</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>dynaBean1.set("test","error");</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">这里会出错！</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">通过设置这两个属性，可以防止意外修改</span>
				<span lang="EN-US">DynaBean</span>
				<span style="FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US">property</span>
				<span style="FONT-FAMILY: 宋体">。在设计架构时，你可以在后台从数据表或</span>
				<span lang="EN-US">xml</span>
				<span style="FONT-FAMILY: 宋体">文件自动产生</span>
				<span lang="EN-US">DynaBean</span>
				<span style="FONT-FAMILY: 宋体">，在传到控制层和表示层之前设置上述属性使其</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">结构不允许修改，如此就不可能无意中修改</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">包含的属性……这样既可以享用它的便利，有可以防止由此引入的错误可能，设计者实在深得偷懒的精髓啊！！！！！</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="1" style="MARGIN: 17pt 0cm 16.5pt 21.25pt">
				<a name="_Toc93765171">
						<span lang="EN-US">
								<span>
										<strong>
												<font size="6">3.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">   </span>
								</span>
						</span>
						<span style="FONT-FAMILY: 宋体">
								<font size="6">
										<strong>其他</strong>
								</font>
						</span>
				</a>
		</p>
		<p class="2" style="MARGIN: 13pt 0cm 13pt 1cm">
				<a name="_Toc93765172">
						<span lang="EN-US">
								<span>
										<strong>
												<font face="Arial" size="5">3.1.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">
										</span>
								</span>
						</span>
						<span lang="EN-US">
								<font face="Arial" size="5">
										<strong>BeanUtils</strong>
								</font>
						</span>
				</a>
				<span>
						<strong>
								<font size="5">
										<span style="FONT-FAMILY: 黑体">和</span>
										<span lang="EN-US">
												<font face="Arial">PropertyUtils</font>
										</span>
								</font>
						</strong>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">这两个类几乎有一摸一样的功能，唯一的区别是：</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">在对</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">赋值是会进行类型转化。举例来说也就是在</span>
				<span lang="EN-US">copyProperty</span>
				<span style="FONT-FAMILY: 宋体">时只要属性名相同，就算类型不同，</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">也可以进行</span>
				<span lang="EN-US">copy</span>
				<span style="FONT-FAMILY: 宋体">；而</span>
				<span lang="EN-US">PropertyBean</span>
				<span style="FONT-FAMILY: 宋体">则可能会报错！！</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">针对上面的例子，新建一个</span>
				<span lang="EN-US">Company2</span>
				<span style="FONT-FAMILY: 宋体">的类，其中代码与</span>
				<span lang="EN-US">Company</span>
				<span style="FONT-FAMILY: 宋体">一样，只是将</span>
				<span lang="EN-US">otherinfo</span>
				<span style="FONT-FAMILY: 宋体">从</span>
				<span lang="EN-US">String[]</span>
				<span style="FONT-FAMILY: 宋体">改为</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>      </span>
						<span style="COLOR: rgb(51,102,255)">Company c = init();</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>Company2 c2 = new Company2();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>BeanUtils.copyProperties(c2,c);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//<span>      </span>PropertyUtils.copyProperties(c2,c); </span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">这句会报错！！</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println(c2.getOtherInfo());</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>    </span>
				</span>
				<span style="FONT-FAMILY: 宋体">当然</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体">个</span>
				<span lang="EN-US">Bean</span>
				<span style="FONT-FAMILY: 宋体">之间的同名属性的类型必须是可以转化的，否则用</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">一样会报错。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">若实现了</span>
				<span lang="EN-US">org.apache.commons.beanutils.Converter</span>
				<span style="FONT-FAMILY: 宋体">接口则可以自定义类型之间的转化。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体">由于不做类型转化，用</span>
				<span lang="EN-US">PropertyUtils</span>
				<span style="FONT-FAMILY: 宋体">在速度上会有很大提高！</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体">此外，不作类型转化还有一个好处，如下面的代码：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>
				</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//test data type convert</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//<span>      </span>ArrayList a1 = BeanUtils.getProperty(c,"product"); //BeanUtils</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">返回的是</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">String</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println("--" + BeanUtils.getProperty(c,"product"));     </span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">取出后直接被转为</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">String</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>ArrayList a = (ArrayList)PropertyUtils.getProperty(c,"product");</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">//PropertyUtils</span>
				<span style="COLOR: rgb(51,153,102); FONT-FAMILY: 宋体">返回的是</span>
				<span lang="EN-US" style="COLOR: rgb(51,153,102)">Object</span>
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: rgb(51,102,255)">
						<span>      </span>System.out.println("--" + a.get(1))</span>
				<span lang="EN-US">;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体">用</span>
				<span lang="EN-US">BeanUtils</span>
				<span style="FONT-FAMILY: 宋体">无法返回一个对象（除非自己写一个</span>
				<span lang="EN-US">Converter</span>
				<span style="FONT-FAMILY: 宋体">），它会自动进行类型转化，然后返回</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体">。对于想返回</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体">类或自定义类的话，还是不要老它大驾转化了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
				</span> </p>
		<p class="2" style="MARGIN: 13pt 0cm 13pt 1cm">
				<a name="_Toc93765173">
						<span lang="EN-US">
								<span>
										<strong>
												<font face="Arial" size="5">3.2.</font>
										</strong>
										<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">
										</span>
								</span>
						</span>
						<span lang="EN-US">
								<font face="Arial" size="5">
										<strong>Utils</strong>
								</font>
						</span>
				</a>
				<span>
						<span style="FONT-FAMILY: 黑体">
								<strong>
										<font size="5">类</font>
								</strong>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span style="FONT-FAMILY: 宋体">所有的</span>
				<span lang="EN-US">XXXUtils</span>
				<span style="FONT-FAMILY: 宋体">类都提供的是静态方法，可以直接调用，其主要实现都在相应的</span>
				<span lang="EN-US">XXXUtilsBean</span>
				<span style="FONT-FAMILY: 宋体">中：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">BeanUtils<span>  </span><span>   </span></span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">——<span lang="EN-US">&gt; BeanUtilsBean</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span>       </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">ConvertUtils<span>  </span></span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">——<span lang="EN-US">&gt; ConvertUtilsBean</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">
						<span>    </span>PropertyUtils </span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">——<span lang="EN-US">&gt; PropertyUtilsBean</span></span>
		</p>
		<br />
<img src ="http://www.blogjava.net/terrywu/aggbug/49490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 11:14 <a href="http://www.blogjava.net/terrywu/articles/49490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> org.apache.commons.lang.time </title><link>http://www.blogjava.net/terrywu/articles/49488.html</link><dc:creator>TNT</dc:creator><author>TNT</author><pubDate>Thu, 01 Jun 2006 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/terrywu/articles/49488.html</guid><wfw:comment>http://www.blogjava.net/terrywu/comments/49488.html</wfw:comment><comments>http://www.blogjava.net/terrywu/articles/49488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrywu/comments/commentRss/49488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrywu/services/trackbacks/49488.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">DateFormatUtils – </span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">提供格式化日期和时间的功能及相关常量；</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">
						<?XML:NAMESPACE PREFIX = O /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">DateUtils – </span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">在</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">Calendar</span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">和</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">Date</span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">的基础上提供更方便的访问；</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">DurationFormatUtils – </span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">提供格式化时间跨度的功能及相关常量；</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">FastDateFormat – </span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">为</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">java.text.SimpleDateFormat</span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">提供一个的线程安全的替代类；</span>
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: navy; FONT-FAMILY: 'Trebuchet MS'">StopWatch – </span>
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">是一个方便的计时器。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">
				</span>
		</p>
		<span style="COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">我们还是在一个例子中来看上述各个类的用法吧：</span>
						<span lang="EN-US" style="FONT-FAMILY: 'Trebuchet MS'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-FAMILY: 'Trebuchet MS'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">package</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> sean.study.jakarta.commons.lang;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> java.util.Calendar;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> java.util.Date;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> org.apache.commons.lang.StringUtils;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> org.apache.commons.lang.time.DateFormatUtils;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> org.apache.commons.lang.time.DateUtils;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> org.apache.commons.lang.time.FastDateFormat;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">import</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"> org.apache.commons.lang.time.StopWatch;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<strong style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'">public</span>
						</strong>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">class</span>
								</strong> DateTimeUsage {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">public</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">static</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">void</span>
								</strong> main(String[] args) {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>demoDateUtils();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>demoStopWatch();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">public</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">static</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">void</span>
								</strong> demoDateUtils() {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(StringUtils.center(<span style="COLOR: blue">" demoDateUtils "</span>, 30, <span style="COLOR: blue">"="</span>));<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>Date date = <strong style="mso-bidi-font-weight: normal"><span style="COLOR: navy">new</span></strong> Date();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>String isoDateTime = DateFormatUtils.ISO_DATETIME_FORMAT.format(date);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>String isoTime = DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(date);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>FastDateFormat fdf = FastDateFormat.getInstance(<span style="COLOR: blue">"yyyy-MM"</span>);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>String customDateTime = fdf.format(date);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"ISO_DATETIME_FORMAT: "</span> + isoDateTime);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"ISO_TIME_NO_T_FORMAT: "</span> + isoTime);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"Custom FastDateFormat: "</span> + customDateTime);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"Default format: "</span> + date);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"Round HOUR: "</span> + DateUtils.round(date, Calendar.HOUR));<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"Truncate HOUR: "</span> + DateUtils.truncate(date, Calendar.HOUR));<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">public</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">static</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">void</span>
								</strong> demoStopWatch() {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(StringUtils.center(<span style="COLOR: blue">" demoStopWatch "</span>, 30, <span style="COLOR: blue">"="</span>));<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>StopWatch sw = new StopWatch();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>sw.start();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>operationA();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>sw.stop();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println(<span style="COLOR: blue">"operationA used "</span> + sw.getTime() + <span style="COLOR: blue">" milliseconds."</span>);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>System.out.println();<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">public</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">static</span>
								</strong>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">void</span>
								</strong> operationA() {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">try</span>
								</strong> {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 3">            </span>Thread.sleep(999);<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>
								<strong style="mso-bidi-font-weight: normal">
										<span style="COLOR: navy">catch</span>
								</strong> (InterruptedException e) {<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 3">            </span>// do nothing<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 2">        </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<span style="mso-tab-count: 1">    </span>}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'">}<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-FAMILY: 'Trebuchet MS'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Trebuchet MS'; mso-hansi-font-family: 'Trebuchet MS'">以下是运行结果：</span>
						<span lang="EN-US" style="FONT-FAMILY: 'Trebuchet MS'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="FONT-FAMILY: 'Trebuchet MS'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">======= demoDateUtils ========</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">ISO_DATETIME_FORMAT: <?XML:NAMESPACE PREFIX = ST1 /?><st1:chsdate w:st="on" year="2005" month="8" day="1" islunardate="False" isrocdate="False">2005-08-01</st1:chsdate>T12:41:51</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">ISO_TIME_NO_T_FORMAT: 12:41:51</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">Custom FastDateFormat: 2005-08</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">Default format: Mon Aug 01 12:41:51 CST 2005</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">Round HOUR: Mon Aug 01 13:00:00 CST 2005</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">Truncate HOUR: Mon Aug 01 12:00:00 CST 2005</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">======= demoStopWatch ========</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
						<span lang="EN-US" style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">operationA used 1000 milliseconds.</span>
				</p>
		</span>
<img src ="http://www.blogjava.net/terrywu/aggbug/49488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrywu/" target="_blank">TNT</a> 2006-06-01 11:12 <a href="http://www.blogjava.net/terrywu/articles/49488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>