﻿<?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-梦幻e家人</title><link>http://www.blogjava.net/dreamer/</link><description>java咖啡</description><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 21:13:44 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 21:13:44 GMT</pubDate><ttl>60</ttl><item><title>Lucene关键字高亮显示</title><link>http://www.blogjava.net/dreamer/archive/2008/08/06/220386.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Wed, 06 Aug 2008 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/08/06/220386.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/220386.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/08/06/220386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/220386.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/220386.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="760" align="center" bgcolor="#ffffff" border="0">
    <tbody>
        <tr>
            <td align="center" height="30"><font style="font-size: 14pt" color="#02368d"><strong>Lucene关键字高亮显示</strong></font><br />
            </td>
        </tr>
        <tr>
            <td align="center" height="9"><img height="9" alt="" src="http://blog.chinaunix.net/templates/default/images/right_line.gif" width="502" border="0" /></td>
        </tr>
        <tr>
            <td align="center">
            <table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="740" border="0">
                <tbody>
                    <tr>
                        <td width="740">
                        <div id="art" style="margin: 15px" width="560">
                        <div>本文转自： <a href="http://daihaixiang.blog.163.com/blog/static/38301342008416104432532/">http://daihaixiang.blog.163.com/blog/static/38301342008416104432532/</a></div>
                        <div>&nbsp;</div>
                        <div>&nbsp;</div>
                        <div>
                        <p>在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、Google搜索的时候，检索结果显示的时候，在摘要中实现与关键字相同的词条进行高亮显示，百度和Google指定红色高亮显示。</p>
                        <p>有了Lucene提供的高亮显示的工具，可以很方便地实现高亮显示的功能。</p>
                        <p>高亮显示，就是根据用户输入的检索关键字，检索找到该关键字对应的检索结果文件，提取对应于该文件的摘要文本，然后根据设置的高亮格式，将格式写入到摘要文本中对应的与关键字相同或相似的词条上，在网页上显示出来，该摘要中的与关键字有关的文本就会以高亮的格式显示出来。</p>
                        <p>Lucene中org.apache.lucene.search.highlight.SimpleHTMLFormatter类可以构造一个高亮格式，这是最简单的构造方式，例如：</p>
                        <p>SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("&lt;font color='red'&gt;", "&lt;/font&gt;");</p>
                        <p>构造方法声明为public SimpleHTMLFormatter(String preTag, String postTag)，因为这种高亮格式是依赖于网页文件的，HTML文件中是以标记(tag)来标识的，即存在一个preTag和一个postTag。</p>
                        <p>上面构造的高亮格式是摘要中出现的关键字使用红色来显示，区分其它文本。</p>
                        <p>通过构造好的高亮格式对象，来构造一个org.apache.lucene.search.highlight.Highlighter实例，然后根据对检索结果得到的Field的文本内容(这里是指摘要文本)进行切分，找到与检索关键字相同或相似的词条，将高亮格式加入到摘要文本中，返回一个新的、带有格式的摘要文本，在网页上就可以呈现高亮显示。</p>
                        <p>下面实现一个简单的例子，展示实现高亮显示的处理过程。</p>
                        <p>测试类如下所示：</p>
                        <p>package org.shirdrn.lucene.learn.highlight;</p>
                        <p>import java.io.IOException;<br />
                        import java.io.StringReader;</p>
                        <p>import net.teamhot.lucene.ThesaurusAnalyzer;</p>
                        <p>import org.apache.lucene.analysis.Analyzer;<br />
                        import org.apache.lucene.analysis.TokenStream;<br />
                        import org.apache.lucene.document.Document;<br />
                        import org.apache.lucene.document.Field;<br />
                        import org.apache.lucene.index.CorruptIndexException;<br />
                        import org.apache.lucene.index.IndexWriter;<br />
                        import org.apache.lucene.queryParser.ParseException;<br />
                        import org.apache.lucene.queryParser.QueryParser;<br />
                        import org.apache.lucene.search.Hits;<br />
                        import org.apache.lucene.search.IndexSearcher;<br />
                        import org.apache.lucene.search.Query;<br />
                        import org.apache.lucene.search.highlight.Highlighter;<br />
                        import org.apache.lucene.search.highlight.QueryScorer;<br />
                        import org.apache.lucene.search.highlight.SimpleFragmenter;<br />
                        import org.apache.lucene.search.highlight.SimpleHTMLFormatter;</p>
                        <p>public class MyHighLighter {<br />
                        <br />
                        private String indexPath = "F:\\index";<br />
                        private Analyzer analyzer;<br />
                        private IndexSearcher searcher;<br />
                        <br />
                        public MyHighLighter(){<br />
                        &nbsp;&nbsp; analyzer = new ThesaurusAnalyzer();<br />
                        }<br />
                        <br />
                        public void createIndex() throws IOException {&nbsp;&nbsp;<font color="#339966"> // 该方法建立索引</font><br />
                        &nbsp;&nbsp; IndexWriter writer = new IndexWriter(indexPath,analyzer,true);<br />
                        &nbsp;&nbsp; Document docA = new Document();<br />
                        &nbsp;&nbsp; String fileTextA = "因为火烧云总是燃烧着消失在太阳冲下地平线的时刻，然后便是宁静的自然的天籁，没有谁会在这样的时光的镜片里伤感自语，因为灿烂给人以安静的舒适感。";<br />
                        &nbsp;&nbsp; Field fieldA = new Field("contents", fileTextA, Field.Store.YES,Field.Index.TOKENIZED);<br />
                        &nbsp;&nbsp; docA.add(fieldA); <br />
                        &nbsp;&nbsp;<br />
                        &nbsp;&nbsp; Document docB = new Document();<br />
                        &nbsp;&nbsp; String fileTextB = "因为带有以伤痕为代价的美丽风景总是让人不由地惴惴不安，紧接着袭面而来的抑或是病痛抑或是灾难，没有谁会能够安逸着恬然，因为模糊让人撕心裂肺地想呐喊。";<br />
                        &nbsp;&nbsp; Field fieldB = new Field("contents", fileTextB, Field.Store.YES,Field.Index.TOKENIZED);<br />
                        &nbsp;&nbsp; docB.add(fieldB); <br />
                        &nbsp;&nbsp;<br />
                        &nbsp;&nbsp; Document docC = new Document();<br />
                        &nbsp;&nbsp; String fileTextC = "我喜欢上了一个人孤独地行游，在梦与海洋的交接地带炽烈燃烧着。"+<br />
                        &nbsp;&nbsp; "因为，一条孤独的鱼喜欢上了火焰的颜色，真是荒唐地不合逻辑。";<br />
                        &nbsp;&nbsp; Field fieldC = new Field("contents", fileTextC, Field.Store.YES,Field.Index.TOKENIZED);<br />
                        &nbsp;&nbsp; docC.add(fieldC); <br />
                        &nbsp;&nbsp;<br />
                        &nbsp;&nbsp; writer.addDocument(docA);<br />
                        &nbsp;&nbsp; writer.addDocument(docB);<br />
                        &nbsp;&nbsp; writer.addDocument(docC);<br />
                        &nbsp;&nbsp; writer.optimize();<br />
                        &nbsp;&nbsp; writer.close();<br />
                        }<br />
                        <br />
                        public void search(String fieldName,String keyword) throws CorruptIndexException, IOException, ParseException{&nbsp;&nbsp;<font color="#339966"> // 检索的方法，并实现高亮显示<br />
                        </font>&nbsp;&nbsp; searcher = new IndexSearcher(indexPath); <br />
                        &nbsp;&nbsp; QueryParser queryParse = new QueryParser(fieldName, analyzer);&nbsp;&nbsp;&nbsp;&nbsp;<font color="#339966"> //&nbsp;&nbsp; 构造QueryParser，解析用户输入的检索关键字</font><br />
                        &nbsp;&nbsp; Query query = queryParse.parse(keyword); <br />
                        &nbsp;&nbsp; Hits hits = searcher.search(query);<br />
                        &nbsp;&nbsp; for(int i=0;i&lt;hits.length();i++){<br />
                        &nbsp;&nbsp;&nbsp; Document doc = hits.doc(i);<br />
                        &nbsp;&nbsp;&nbsp; String text = doc.get(fieldName);<br />
                        &nbsp;&nbsp;&nbsp; SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("&lt;font color='red'&gt;", "&lt;/font&gt;");&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; highlighter.setTextFragmenter(new SimpleFragmenter(text.length()));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (text != null) {&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TokenStream tokenStream = analyzer.tokenStream(fieldName,new StringReader(text));&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String highLightText = highlighter.getBestFragment(tokenStream, text); <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示："); <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(highLightText);&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
                        &nbsp;&nbsp; }<br />
                        &nbsp;&nbsp; searcher.close();<br />
                        }<br />
                        <br />
                        <br />
                        public static void main(String[] args) {&nbsp;&nbsp;&nbsp; <font color="#339966">// 测试主函数</font><br />
                        &nbsp;&nbsp; MyHighLighter mhl = new MyHighLighter();<br />
                        &nbsp;&nbsp; try {<br />
                        &nbsp;&nbsp;&nbsp; mhl.createIndex();<br />
                        &nbsp;&nbsp;&nbsp; mhl.search("contents", "因为");<br />
                        &nbsp;&nbsp; } catch (CorruptIndexException e) {<br />
                        &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
                        &nbsp;&nbsp; } catch (IOException e) {<br />
                        &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
                        &nbsp;&nbsp; } catch (ParseException e) {<br />
                        &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
                        &nbsp;&nbsp; }<br />
                        }</p>
                        <p>}</p>
                        <p>程序说明：</p>
                        <p>1、createIndex()方法：使用ThesaurusAnalyzer分析器为指定的文本建立索引。每个Document中都有一个name为contents的Field。在实际应用中，可以再构造一一个name为path的Field，指定检索到的文件的路径(本地路径或者网络上的链接地址)</p>
                        <p>2、根据已经建好的索引库进行检索。这首先需要解析用户输入的检索关键字，使用QueryParser，必须与后台使用的分析器相同，否则不能保证解析得到的查询(由词条构造)Query检索到合理的结果集。</p>
                        <p>3、根据解析出来的Query进行检索，检索结果集保存在Hits中。遍历，提取每个满足条件的Document的内容，程序中直接把它的内容当作摘要内容，实现高亮显示。在实际应用中，应该对应着一个提取摘要(或者检索数据库得到检索关键字对应的结果集文件的摘要内容)的过程。有了摘要以后，就可以为摘要内容增加高亮格式。</p>
                        <p>4、如果提取结果集文件的前N个字符串作为摘要，只需要在 highlighter.setTextFragmenter(new SimpleFragmenter(text.length())); 中设置显示摘要的字数，这里显示全部的文本作为摘要。</p>
                        <p>运行程序，结果如下所示：</p>
                        <p>词库尚未被初始化，开始初始化词库.<br />
                        初始化词库结束。用时:3906毫秒;<br />
                        共添加195574个词语。<br />
                        ★高亮显示第 1 条检索结果如下所示：<br />
                        <font color="#ff0000">&lt;font color='red'&gt;因为&lt;/font&gt;</font>火烧云总是燃烧着消失在太阳冲下地平线的时刻，然后便是宁静的自然的天籁，没有谁会在这样的时光的镜片里伤感自语<font color="#ff0000">，&lt;font color='red'&gt;因为&lt;/font&gt;</font>灿烂给人以安静的舒适感。<br />
                        ★高亮显示第 2 条检索结果如下所示：<br />
                        <font color="#ff0000">&lt;font color='red'&gt;因为&lt;/font&gt;</font>带有以伤痕为代价的美丽风景总是让人不由地惴惴不安，紧接着袭面而来的抑或是病痛抑或是灾难，没有谁会能够安逸着恬然<font color="#ff0000">，&lt;font color='red'&gt;因为&lt;/font&gt;</font>模糊让人撕心裂肺地想呐喊。<br />
                        ★高亮显示第 3 条检索结果如下所示：<br />
                        我喜欢上了一个人孤独地行游，在梦与海洋的交接地带炽烈燃烧着。<font color="#ff0000">&lt;font color='red'&gt;因为&lt;/font&gt;</font>，一条孤独的鱼喜欢上了火焰的颜色，真是荒唐地不合逻辑。</p>
                        <p>上面的检索结果在HTML网页中，就会高亮显示关键字&#8220;因为&#8221;，显示为红色。</p>
                        </div>
                        </div>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/dreamer/aggbug/220386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-08-06 11:24 <a href="http://www.blogjava.net/dreamer/archive/2008/08/06/220386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene关键字高亮显示</title><link>http://www.blogjava.net/dreamer/archive/2008/08/06/220383.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Wed, 06 Aug 2008 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/08/06/220383.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/220383.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/08/06/220383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/220383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/220383.html</trackback:ping><description><![CDATA[<p>package searchfileexample;</p>
<p>import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import java.io.*;<br />
import java.io.IOException;<br />
import java.io.StringReader;</p>
<p>import org.apache.lucene.analysis.Analyzer;<br />
import org.apache.lucene.analysis.TokenStream;<br />
import org.apache.lucene.document.Document;<br />
import org.apache.lucene.document.Field;<br />
import org.apache.lucene.index.CorruptIndexException;<br />
import org.apache.lucene.index.IndexWriter;<br />
import org.apache.lucene.queryParser.ParseException;<br />
import org.apache.lucene.queryParser.QueryParser;<br />
import org.apache.lucene.search.Hits;<br />
import org.apache.lucene.search.IndexSearcher;<br />
import org.apache.lucene.search.Query;<br />
import org.apache.lucene.search.highlight.Highlighter;<br />
import org.apache.lucene.search.highlight.QueryScorer;<br />
import org.apache.lucene.search.highlight.SimpleFragmenter;<br />
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;<br />
import org.apache.lucene.analysis.standard.StandardAnalyzer;</p>
<p><br />
public class MyHighLighterServlet extends HttpServlet {<br />
&nbsp; private static final String CONTENT_TYPE = "text/html; charset=GB18030";</p>
<p>&nbsp; private String indexPath = "C:\\index";<br />
&nbsp; private Analyzer analyzer;<br />
&nbsp; private IndexSearcher searcher;</p>
<p>&nbsp; //Initialize global variables<br />
&nbsp; public void init() throws ServletException {<br />
&nbsp;&nbsp;&nbsp; analyzer = new StandardAnalyzer();<br />
&nbsp; }<br />
&nbsp; public void createIndex() throws IOException {&nbsp;&nbsp; // 该方法建立索引<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexWriter writer = new IndexWriter(indexPath,analyzer,true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document docA = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileTextA = "因为火烧云总是燃烧着消失在太阳冲下地平线的时刻，然后便是宁静的自然的天籁，没有谁会在这样的时光的镜片里伤感自语，因为灿烂给人以安静的舒适感。";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field fieldA = new Field("contents", fileTextA, Field.Store.YES,Field.Index.TOKENIZED);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docA.add(fieldA); <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document docB = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileTextB = "因为带有以伤痕为代价的美丽风景总是让人不由地惴惴不安，紧接着袭面而来的抑或是病痛抑或是灾难，没有谁会能够安逸着恬然，因为模糊让人撕心裂肺地想呐喊。";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field fieldB = new Field("contents", fileTextB, Field.Store.YES,Field.Index.TOKENIZED);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docB.add(fieldB); <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document docC = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileTextC = "我喜欢上了一个人孤独地行游，在梦与海洋的交接地带炽烈燃烧着。"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "因为，一条孤独的鱼喜欢上了火焰的颜色，真是荒唐地不合逻辑,原因。";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field fieldC = new Field("contents", fileTextC, Field.Store.YES,Field.Index.TOKENIZED);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docC.add(fieldC); <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(docA);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(docB);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(docC);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.optimize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void search(String fieldName,String keyword,PrintWriter out) throws CorruptIndexException, IOException, ParseException{&nbsp;&nbsp; // 检索的方法，并实现高亮显示<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searcher = new IndexSearcher(indexPath); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueryParser queryParse = new QueryParser(fieldName, analyzer);&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 构造QueryParser，解析用户输入的检索关键字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = queryParse.parse(keyword); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hits hits = searcher.search(query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;hits.length();i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = hits.doc(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text = doc.get(fieldName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("&lt;font color='red'&gt;", "&lt;/font&gt;");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; highlighter.setTextFragmenter(new SimpleFragmenter(text.length()));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (text != null) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TokenStream tokenStream = analyzer.tokenStream(fieldName,new StringReader(text));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String highLightText = highlighter.getBestFragment(tokenStream, text); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示："); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(highLightText);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searcher.close();<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp; //Process the HTTP Get request<br />
&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; response.setContentType(CONTENT_TYPE);<br />
&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;html&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;head&gt;&lt;title&gt;MyHighLighterServlet&lt;/title&gt;&lt;/head&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;body bgcolor=\"#ffffff\"&gt;");</p>
<p>&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createIndex();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; search("contents", "因为",out);<br />
&nbsp;&nbsp;&nbsp;&nbsp; } catch (CorruptIndexException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp; } catch (ParseException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;&lt;/html&gt;");<br />
&nbsp; }</p>
<p>&nbsp; //Clean up resources<br />
&nbsp; public void destroy() {<br />
&nbsp; }<br />
}</p>
<img src ="http://www.blogjava.net/dreamer/aggbug/220383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-08-06 11:22 <a href="http://www.blogjava.net/dreamer/archive/2008/08/06/220383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_blank _self的含义</title><link>http://www.blogjava.net/dreamer/archive/2008/07/08/213238.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Tue, 08 Jul 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/07/08/213238.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/213238.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/07/08/213238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/213238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/213238.html</trackback:ping><description><![CDATA[_blank -- 打开一个新窗体 <br />
_parent -- 在父窗体中打开 <br />
_self -- 在本页打开,此为默认值 <br />
_top -- 在上层窗体中打开 <br />
_search --同时打开搜索窗口 <br />
<br />
一个对应的框架页的名称 -- 在对应框架页中打开
<img src ="http://www.blogjava.net/dreamer/aggbug/213238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-07-08 10:23 <a href="http://www.blogjava.net/dreamer/archive/2008/07/08/213238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js开发笔记</title><link>http://www.blogjava.net/dreamer/archive/2008/06/05/206071.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Thu, 05 Jun 2008 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/06/05/206071.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/206071.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/06/05/206071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/206071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/206071.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Table of Contents1. Programming Guide1.1. Prototype是什么?1.2. 关联文章1.3. 通用性方法1.3.1. 使用 $()方法1.3.2. 使用$F()方法1.3.3. 使用$A()方法1.3.4. 使用$H()方法1.3.5. 使用$R()方法1.3.6. 使用Try.these()方...&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamer/archive/2008/06/05/206071.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamer/aggbug/206071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-06-05 15:56 <a href="http://www.blogjava.net/dreamer/archive/2008/06/05/206071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全文检索第二版,分别对TXT,WORD,EXCEL文件进行了处理</title><link>http://www.blogjava.net/dreamer/archive/2008/03/19/187293.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Wed, 19 Mar 2008 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/03/19/187293.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/187293.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/03/19/187293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/187293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/187293.html</trackback:ping><description><![CDATA[<p>package searchfileexample;</p>
<p>/**<br />
&nbsp;* 读取Excel文件<br />
&nbsp;*/<br />
import java.io.*;<br />
import org.apache.poi.hssf.usermodel.HSSFWorkbook;<br />
import org.apache.poi.hssf.usermodel.HSSFSheet;<br />
import org.apache.poi.hssf.usermodel.HSSFCell;<br />
import org.apache.poi.hssf.usermodel.HSSFDateUtil;<br />
import java.util.Date;<br />
import org.apache.poi.hssf.usermodel.HSSFRow;</p>
<p>public class ExcelReader {<br />
&nbsp; // 创建文件输入流<br />
&nbsp; private BufferedReader reader = null;</p>
<p>&nbsp; // 文件类型<br />
&nbsp; private String filetype;</p>
<p>&nbsp; // 文件二进制输入流<br />
&nbsp; private InputStream is = null;</p>
<p>&nbsp; // 当前的Sheet<br />
&nbsp; private int currSheet;</p>
<p>&nbsp; // 当前位置<br />
&nbsp; private int currPosition;</p>
<p>&nbsp; // Sheet数量<br />
&nbsp; private int numOfSheets;</p>
<p>&nbsp; // HSSFWorkbook<br />
&nbsp; HSSFWorkbook workbook = null;<br />
&nbsp; // 设置Cell之间以空格分割<br />
&nbsp; private static String EXCEL_LINE_DELIMITER = " ";</p>
<p>&nbsp; // 设置最大列数<br />
&nbsp; private static int MAX_EXCEL_COLUMNS = 64;</p>
<p>&nbsp; public int rows = 0;<br />
&nbsp; public int getRows() {<br />
&nbsp;&nbsp;&nbsp; return rows;<br />
&nbsp; }</p>
<p>&nbsp; // 构造函数创建一个ExcelReader</p>
<p>&nbsp; public ExcelReader(String inputfile) throws IOException, Exception {<br />
&nbsp;&nbsp;&nbsp; // 判断参数是否为空或没有意义<br />
&nbsp;&nbsp;&nbsp; if (inputfile == null || inputfile.trim().equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException("no input file specified");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // 取得文件名的后缀名赋值给filetype<br />
&nbsp;&nbsp;&nbsp; this.filetype = inputfile.substring(inputfile.lastIndexOf(".") + 1);<br />
&nbsp;&nbsp;&nbsp; // 设置开始行为0<br />
&nbsp;&nbsp;&nbsp; currPosition = 0;<br />
&nbsp;&nbsp;&nbsp; // 设置当前位置为0<br />
&nbsp;&nbsp;&nbsp; currSheet = 0;<br />
&nbsp;&nbsp;&nbsp; // 创建文件输入流<br />
&nbsp;&nbsp;&nbsp; is = new FileInputStream(inputfile);<br />
&nbsp;&nbsp;&nbsp; // 判断文件格式<br />
&nbsp;&nbsp;&nbsp; if (filetype.equalsIgnoreCase("txt")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果是txt则直接创建BufferedReader读取<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = new BufferedReader(new InputStreamReader(is));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else if (filetype.equalsIgnoreCase("xls")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果是Excel文件则创建HSSFWorkbook读取<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; workbook = new HSSFWorkbook(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置Sheet数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numOfSheets = workbook.getNumberOfSheets();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("File Type Not Supported");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; // 函数readLine读取文件的一行<br />
&nbsp; public String readLine() throws IOException {<br />
&nbsp;&nbsp;&nbsp; // 如果是txt文件则通过reader读取<br />
&nbsp;&nbsp;&nbsp; if (filetype.equalsIgnoreCase("txt")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = reader.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 空行则略去，直接读取下一行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (str.trim().equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = reader.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // 如果是XLS文件则通过POI提供的API读取文件<br />
&nbsp;&nbsp;&nbsp; else if (filetype.equalsIgnoreCase("xls")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 根据currSheet值获得当前的sheet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFSheet sheet = workbook.getSheetAt(currSheet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows = sheet.getLastRowNum();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 判断当前行是否到但前Sheet的结尾<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currPosition &gt; sheet.getLastRowNum()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前行位置清零<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currPosition = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 判断是否还有Sheet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (currSheet != numOfSheets - 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到下一张Sheet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet = workbook.getSheetAt(currSheet + 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前行数是否已经到达文件末尾<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (currPosition == sheet.getLastRowNum()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前Sheet指向下一张Sheet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currSheet++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获取当前行数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int row = currPosition;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currPosition++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 读取当前行数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getLine(sheet, row);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获取当前行数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int row = currPosition;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currPosition++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 读取当前行数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getLine(sheet, row);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>&nbsp; // 函数getLine返回Sheet的一行数据<br />
&nbsp; private String getLine(HSSFSheet sheet, int row) {<br />
&nbsp;&nbsp;&nbsp; // 根据行数取得Sheet的一行<br />
&nbsp;&nbsp;&nbsp; HSSFRow rowline = sheet.getRow(row);<br />
&nbsp;&nbsp;&nbsp; // 创建字符创缓冲区<br />
&nbsp;&nbsp;&nbsp; StringBuffer buffer = new StringBuffer();<br />
&nbsp;&nbsp;&nbsp; // 获取当前行的列数<br />
&nbsp;&nbsp;&nbsp; int filledColumns = rowline.getLastCellNum();<br />
&nbsp;&nbsp;&nbsp; HSSFCell cell = null;<br />
&nbsp;&nbsp;&nbsp; // 循环遍历所有列<br />
&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; filledColumns; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取得当前Cell<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell = rowline.getCell( (short) i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cellvalue = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cell != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 判断当前Cell的Type<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (cell.getCellType()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果当前Cell的Type为NUMERIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case HSSFCell.CELL_TYPE_NUMERIC: {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 判断当前的cell是否为Date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (HSSFDateUtil.isCellDateFormatted(cell)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果是Date类型则，取得该Cell的Date值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = cell.getDateCellValue();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把Date转换成本地格式的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellvalue = cell.getDateCellValue().toLocaleString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果是纯数字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取得当前Cell的数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer num = new Integer( (int) cell<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getNumericCellValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellvalue = String.valueOf(num);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果当前Cell的Type为STRIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case HSSFCell.CELL_TYPE_STRING:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取得当前的Cell字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellvalue = cell.getStringCellValue().replaceAll("'", "''");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 默认的Cell值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellvalue = " ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellvalue = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 在每个字段之间插入分割符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // 以字符串返回该行的数据<br />
&nbsp;&nbsp;&nbsp; return buffer.toString();<br />
&nbsp; }</p>
<p>&nbsp; // close函数执行流的关闭操作<br />
&nbsp; public void close() {<br />
&nbsp;&nbsp;&nbsp; // 如果is不为空，则关闭InputSteam文件输入流<br />
&nbsp;&nbsp;&nbsp; if (is != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; // 如果reader不为空则关闭BufferedReader文件输入流<br />
&nbsp;&nbsp;&nbsp; if (reader != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExcelReader er = new ExcelReader("d:\\xp.xls");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = er.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (line != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = er.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; er.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>}<br />
<br />
</p>
<p>package searchfileexample;</p>
<p>import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import java.io.*;<br />
import java.util.*;</p>
<p>import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
import org.apache.lucene.index.IndexWriter;</p>
<p>import java.io.File;<br />
import java.io.FileNotFoundException;<br />
import java.io.IOException;<br />
import java.util.Date;<br />
import org.apache.lucene.demo.FileDocument;<br />
import org.apache.lucene.document.Document;<br />
import org.apache.lucene.document.Field;<br />
import java.io.FileReader;<br />
import org.apache.lucene.index.*;<br />
import java.text.DateFormat;<br />
import org.apache.poi.hdf.extractor.WordDocument;<br />
import java.io.InputStream;<br />
import java.io.StringWriter;<br />
import java.io.PrintWriter;<br />
import java.io.FileInputStream;<br />
import java.io.*;<br />
import org.textmining.text.extraction.WordExtractor;<br />
import org.apache.poi.hssf.usermodel.HSSFWorkbook;</p>
<p>/**<br />
&nbsp;* 给某个目录下的所有文件生成索引<br />
&nbsp;* &lt;p&gt;Title: &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Description: &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Copyright: Copyright (c) 2007&lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Company: &lt;/p&gt;<br />
&nbsp;* @author not attributable<br />
&nbsp;* @version 1.0<br />
&nbsp;* 根据文件的不同，可以把索引文件创建到不同的文件夹下去，这样可以分类保存索引信息。<br />
&nbsp;*/</p>
<p>public class IndexFilesServlet<br />
&nbsp;&nbsp;&nbsp; extends HttpServlet {<br />
&nbsp; static final File INDEX_DIR = new File("index");</p>
<p>&nbsp; //Initialize global variables<br />
&nbsp; public void init() throws ServletException {<br />
&nbsp; }</p>
<p>&nbsp; //Process the HTTP Get request<br />
&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; final File docDir = new File("a"); //需要生成索引的文件的文件夹<br />
&nbsp;&nbsp;&nbsp; if (!docDir.exists() || !docDir.canRead()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Document directory '" + docDir.getAbsolutePath() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "' does not exist or is not readable, please check the path");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; Date start = new Date();<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexWriter writer = new IndexWriter(INDEX_DIR, new StandardAnalyzer(), true); //true-覆盖原有的索引 false-不覆盖原有的索引<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Indexing to directory '" + INDEX_DIR + "'...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexDocs(writer, docDir);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Optimizing...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.optimize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date end = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(end.getTime() - start.getTime() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " total milliseconds");</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(" caught a " + e.getClass() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "\n with message: " + e.getMessage());<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp; }</p>
<p>&nbsp; //Clean up resources<br />
&nbsp; public void destroy() {<br />
&nbsp; }</p>
<p>&nbsp; public void indexDocs(IndexWriter writer, File file) throws IOException {<br />
&nbsp;&nbsp;&nbsp; // do not try to index files that cannot be read<br />
&nbsp;&nbsp;&nbsp; int index = 0;<br />
&nbsp;&nbsp;&nbsp; String filehouzui = "";<br />
&nbsp;&nbsp;&nbsp; index = file.getName().indexOf(".");<br />
&nbsp;&nbsp;&nbsp; //strFileName = strFileName.substring(0, index) +DateUtil.getCurrDateTime() + "." + strFileName.substring(index + 1);<br />
&nbsp;&nbsp;&nbsp; filehouzui = file.getName().substring(index + 1);</p>
<p>&nbsp;&nbsp;&nbsp; if (file.canRead()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (file.isDirectory()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] files = file.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // an IO error could occur<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (files != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; files.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexDocs(writer, new File(file, files[i]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("adding " + file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (filehouzui.equals("doc")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(getWordDocument(file, new FileInputStream(file)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (filehouzui.equals("txt")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(getTxtDocument(file, new FileInputStream(file)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (filehouzui.equals("xls")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(getExcelDocument(file, new FileInputStream(file)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //writer.addDocument(parseFile(file));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //writer.addDocument(FileDocument.Document(file));//path 存放文件的相对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // at least on windows, some temporary files raise this exception with an "access denied" message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // checking if the file can be read doesn't help<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception fnfe) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *把File变成Document<br />
&nbsp;&nbsp; */<br />
&nbsp; public Document parseFile(File file) throws Exception {<br />
&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", new FileReader(file))); //索引文件内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("title", file.getName(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //索引最后修改时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("modified",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String.valueOf(DateFormat.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDateTimeInstance().format(new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date(file.lastModified()))), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //doc.removeField("title");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp; }</p>
<p>&nbsp;<br />
&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *使用POI读取word文档<br />
&nbsp;&nbsp; * 不太好用，读取word文档不全<br />
&nbsp;&nbsp; */<br />
&nbsp; public Document getDocument(File file, FileInputStream is) throws Exception {<br />
&nbsp;&nbsp;&nbsp; String bodyText = null;<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WordDocument wd = new WordDocument(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringWriter docTextWriter = new StringWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wd.writeAllText(new PrintWriter(docTextWriter));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = docTextWriter.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docTextWriter.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; bodyText&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; WordExtractor().extractText(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word content====" + bodyText);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if ( (bodyText != null)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", bodyText, Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>&nbsp; //Document&nbsp;&nbsp; doc&nbsp;&nbsp; =&nbsp;&nbsp; getDocument(new&nbsp;&nbsp; FileInputStream(new&nbsp;&nbsp; File(file)));<br />
&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *使用tm-extractors-0.4.jar读取word文档<br />
&nbsp;&nbsp; * 好用<br />
&nbsp;&nbsp; */<br />
&nbsp; public Document getWordDocument(File file, FileInputStream is) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception {<br />
&nbsp;&nbsp;&nbsp; String bodyText = null;<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WordExtractor extractor = new WordExtractor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word文档");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = extractor.extractText(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( (bodyText != null)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", bodyText, Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word content====" + bodyText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *读取TXT文档<br />
&nbsp;&nbsp; */<br />
&nbsp; public Document getTxtDocument(File file, FileInputStream is) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception {<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reader textReader = new FileReader(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", textReader));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; * 使用POI读取Excel文件<br />
&nbsp;&nbsp; * @param file File<br />
&nbsp;&nbsp; * @param is FileInputStream<br />
&nbsp;&nbsp; * @throws Exception<br />
&nbsp;&nbsp; * @return Document<br />
&nbsp;&nbsp; */<br />
&nbsp; public Document getExcelDocument(File file, FileInputStream is) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception {<br />
&nbsp;&nbsp;&nbsp; String bodyText = "";<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("读取excel文件");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExcelReader er = new ExcelReader(file.getAbsolutePath());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = er.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rows = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows = er.getRows();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; rows; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = bodyText + er.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("bodyText===" + bodyText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", bodyText, Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word content====" + bodyText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }<br />
}<br />
</p>
<p><br />
&nbsp;</p>
<p>package searchfileexample;</p>
<p>import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import java.io.*;<br />
import java.util.*;</p>
<p>import org.apache.lucene.analysis.Analyzer;<br />
import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
import org.apache.lucene.document.Document;<br />
import org.apache.lucene.index.FilterIndexReader;<br />
import org.apache.lucene.index.IndexReader;<br />
import org.apache.lucene.queryParser.QueryParser;<br />
import org.apache.lucene.search.Hits;<br />
import org.apache.lucene.search.IndexSearcher;<br />
import org.apache.lucene.search.Query;<br />
import org.apache.lucene.search.Searcher;</p>
<p>import java.io.BufferedReader;<br />
import java.io.FileReader;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.util.Date;<br />
import org.apache.lucene.queryParser.*;</p>
<p>public class SearchFileServlet<br />
&nbsp;&nbsp;&nbsp; extends HttpServlet {<br />
&nbsp; private static final String CONTENT_TYPE = "text/html; charset=GBK";</p>
<p>&nbsp; //Initialize global variables<br />
&nbsp; public void init() throws ServletException {<br />
&nbsp; }</p>
<p>&nbsp; /** Use the norms from one field for all fields.&nbsp; Norms are read into memory,<br />
&nbsp;&nbsp; * using a byte of memory per document per searched field.&nbsp; This can cause<br />
&nbsp;&nbsp; * search of large collections with a large number of fields to run out of<br />
&nbsp;&nbsp; * memory.&nbsp; If all of the fields contain only a single token, then the norms<br />
&nbsp;&nbsp; * are all identical, then single norm vector may be shared. */<br />
&nbsp; private static class OneNormsReader<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends FilterIndexReader {<br />
&nbsp;&nbsp;&nbsp; private String field;</p>
<p>&nbsp;&nbsp;&nbsp; public OneNormsReader(IndexReader in, String field) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(in);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.field = field;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public byte[] norms(String field) throws IOException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return in.norms(this.field);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; //Process the HTTP Get request<br />
&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) throws<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; response.setContentType(CONTENT_TYPE);<br />
&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();</p>
<p>&nbsp;&nbsp;&nbsp; String[] args = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "a", "b"};<br />
&nbsp;&nbsp;&nbsp; String usage =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Usage: java org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] [-norms field]";<br />
&nbsp;&nbsp;&nbsp; if (args.length &gt; 0 &amp;&amp; ("-h".equals(args[0]) || "-help".equals(args[0]))) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(usage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(0);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; String index = "index"; //该值是用来存放生成的索引文件的文件夹的名称，不能改动<br />
&nbsp;&nbsp;&nbsp; String field = "contents"; //不能修改&nbsp; field&nbsp; 的值<br />
&nbsp;&nbsp;&nbsp; String queries = null; //是用来存放需要检索的关键字的一个文件。<br />
&nbsp;&nbsp;&nbsp; queries = "D:/lfy_programe/全文检索/SearchFileExample/aa.txt";<br />
&nbsp;&nbsp;&nbsp; System.out.println("-----------------------" + request.getContextPath());<br />
&nbsp;&nbsp;&nbsp; int repeat = 1;<br />
&nbsp;&nbsp;&nbsp; boolean raw = false;<br />
&nbsp;&nbsp;&nbsp; String normsField = null;</p>
<p>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; args.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("-index".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index = args[i + 1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ("-field".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field = args[i + 1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ("-queries".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queries = args[i + 1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ("-repeat".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeat = Integer.parseInt(args[i + 1]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ("-raw".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ("-norms".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; normsField = args[i + 1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; IndexReader reader = IndexReader.open(index);</p>
<p>&nbsp;&nbsp;&nbsp; if (normsField != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = new OneNormsReader(reader, normsField);</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; Searcher searcher = new IndexSearcher(reader); //用来打开索引文件<br />
&nbsp;&nbsp;&nbsp; Analyzer analyzer = new StandardAnalyzer(); //分析器<br />
&nbsp;&nbsp;&nbsp; //Analyzer analyzer = new StandardAnalyzer();</p>
<p>&nbsp;&nbsp;&nbsp; BufferedReader in = null;<br />
&nbsp;&nbsp;&nbsp; if (queries != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new BufferedReader(new FileReader(queries));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; QueryParser parser = new QueryParser(field, analyzer);</p>
<p>&nbsp;&nbsp;&nbsp; out.println("&lt;html&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;head&gt;&lt;title&gt;SearchFileServlet&lt;/title&gt;&lt;/head&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;body bgcolor=\"#ffffff\"&gt;");</p>
<p>&nbsp;&nbsp;&nbsp; while (true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queries == null) { // prompt the user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Enter query: ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = in.readLine(); //组成查询关键字字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("查询字符串===" + line);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line == null || line.length() == -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = line.trim();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line.length() == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query = parser.parse(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (ParseException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Searching for: " + query.toString(field)); //每个关键字</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hits hits = searcher.search(query);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (repeat &gt; 0) { // repeat &amp; time as benchmark<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date start = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; repeat; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hits = searcher.search(query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date end = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;p&gt;查询到：" + hits.length() + "个含有[" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.toString(field) + "]的文档&lt;/p&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("查询到：" + hits.length() + " 个含有 [" +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.toString(field) + "]的文档");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final int HITS_PER_PAGE = 10; //查询返回的最大记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int currentNum = 5; //当前记录数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int start = 0; start &lt; hits.length(); start += HITS_PER_PAGE) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //start = start + currentNum;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int end = Math.min(hits.length(), start + HITS_PER_PAGE);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = start; i &lt; end; i++) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (raw) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // output raw format<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("doc=" + hits.id(i) + " score=" + hits.score(i)); //score是接近度的意思<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = hits.doc(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String path = doc.get("path");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (path != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( (i + 1) + ". " + path);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;p&gt;" + (i + 1) + ". " + path + "&lt;/p&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String title = doc.get("title");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp; modified: " + doc.get("modified"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (title != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp; Title: " + doc.get("title"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( (i + 1) + ". " + "No path for this document");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queries != null) { // non-interactive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hits.length() &gt; end) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("more (y/n) ? ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = in.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line.length() == 0 || line.charAt(0) == 'n') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; reader.close();</p>
<p>&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;&lt;/html&gt;");<br />
&nbsp; }</p>
<p>//Clean up resources<br />
&nbsp; public void destroy() {<br />
&nbsp; }<br />
}<br />
</p>
<p><br />
&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/dreamer/aggbug/187293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-03-19 16:52 <a href="http://www.blogjava.net/dreamer/archive/2008/03/19/187293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全文检索</title><link>http://www.blogjava.net/dreamer/archive/2008/03/18/186938.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Tue, 18 Mar 2008 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/03/18/186938.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/186938.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/03/18/186938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/186938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/186938.html</trackback:ping><description><![CDATA[<p>package searchfileexample;</p>
<p>import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
import org.apache.lucene.index.IndexWriter;</p>
<p>import java.io.File;<br />
import java.io.FileNotFoundException;<br />
import java.io.IOException;<br />
import java.util.Date;<br />
import org.apache.lucene.demo.FileDocument;<br />
import org.apache.lucene.document.Document;<br />
import org.apache.lucene.document.Field;<br />
import java.io.FileReader;<br />
import org.apache.lucene.index.*;<br />
import java.text.DateFormat;<br />
import org.apache.poi.hdf.extractor.WordDocument;<br />
import java.io.InputStream;<br />
import java.io.StringWriter;<br />
import java.io.PrintWriter;<br />
import java.io.FileInputStream;<br />
import java.io.*;<br />
import org.textmining.text.extraction.WordExtractor;</p>
<p>/**<br />
&nbsp;* 给某个目录下的所有文件生成索引<br />
&nbsp;* &lt;p&gt;Title: &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Description: &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Copyright: Copyright (c) 2007&lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Company: &lt;/p&gt;<br />
&nbsp;* @author not attributable<br />
&nbsp;* @version 1.0<br />
&nbsp;* 根据文件的不同，可以把索引文件创建到不同的文件夹下去，这样可以分类保存索引信息。<br />
&nbsp;*/</p>
<p>/** Index all text files under a directory. */<br />
public class IndexFiles {</p>
<p>&nbsp; private IndexFiles() {}</p>
<p>&nbsp; static final File INDEX_DIR = new File("index");</p>
<p>&nbsp; /** Index all text files under a directory. */<br />
&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; String usage = "java org.apache.lucene.demo.IndexFiles &lt;root_directory&gt;";<br />
&nbsp;&nbsp;&nbsp; //String[] arg = {"a","b"};<br />
&nbsp;&nbsp;&nbsp; //System.out.println(arg[0]);<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Usage: " + usage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (INDEX_DIR.exists()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Cannot save index to '" +INDEX_DIR+ "' directory, please delete it first");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/</p>
<p>&nbsp;&nbsp;&nbsp; final File docDir = new File("a"); //需要生成索引的文件的文件夹<br />
&nbsp;&nbsp;&nbsp; if (!docDir.exists() || !docDir.canRead()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Document directory '" + docDir.getAbsolutePath() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "' does not exist or is not readable, please check the path");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; Date start = new Date();<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IndexWriter writer = new IndexWriter(INDEX_DIR, new StandardAnalyzer(), true); //true-覆盖原有的索引 false-不覆盖原有的索引<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Indexing to directory '" + INDEX_DIR + "'...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexDocs(writer, docDir);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Optimizing...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.optimize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date end = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(end.getTime() - start.getTime() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " total milliseconds");</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(" caught a " + e.getClass() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "\n with message: " + e.getMessage());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; static void indexDocs(IndexWriter writer, File file) throws IOException {<br />
&nbsp;&nbsp;&nbsp; // do not try to index files that cannot be read<br />
&nbsp;&nbsp;&nbsp; if (file.canRead()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (file.isDirectory()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] files = file.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // an IO error could occur<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (files != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; files.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexDocs(writer, new File(file, files[i]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("adding " + file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.addDocument(getDocument2(file, new FileInputStream(file)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //writer.addDocument(parseFile(file));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //writer.addDocument(FileDocument.Document(file));//path 存放文件的相对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // at least on windows, some temporary files raise this exception with an "access denied" message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // checking if the file can be read doesn't help<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception fnfe) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *把File变成Document<br />
&nbsp;&nbsp; */<br />
&nbsp; static Document parseFile(File file) throws Exception {<br />
&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", new FileReader(file))); //索引文件内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("title", file.getName(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //索引最后修改时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("modified",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String.valueOf(DateFormat.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDateTimeInstance().format(new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date(file.lastModified()))), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //doc.removeField("title");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp; }</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *转换word文档</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static String changeWord(File file) throws Exception {<br />
&nbsp;&nbsp;&nbsp; String re = "";<br />
&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WordDocument wd = new WordDocument(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringWriter docTextWriter = new StringWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wd.writeAllText(new PrintWriter(docTextWriter));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docTextWriter.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = docTextWriter.toString();</p>
<p>&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return re;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<br />
&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *使用POI读取word文档<br />
&nbsp;&nbsp; */<br />
&nbsp; static Document getDocument(File file, FileInputStream is) throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp; String bodyText = null;</p>
<p>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //BufferedReader wt = new BufferedReader(new InputStreamReader(is));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //bodyText = wt.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("word ===="+bodyText);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WordDocument wd = new WordDocument(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringWriter docTextWriter = new StringWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wd.writeAllText(new PrintWriter(docTextWriter));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = docTextWriter.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docTextWriter.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; bodyText&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; WordExtractor().extractText(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word content====" + bodyText);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if ( (bodyText != null)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", bodyText, Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.TOKENIZED));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>&nbsp; //Document&nbsp;&nbsp; doc&nbsp;&nbsp; =&nbsp;&nbsp; getDocument(new&nbsp;&nbsp; FileInputStream(new&nbsp;&nbsp; File(file)));<br />
&nbsp; /**<br />
&nbsp;&nbsp; *@paramfile<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; *使用tm-extractors-0.4.jar读取word文档<br />
&nbsp;&nbsp; */<br />
&nbsp; static Document getDocument2(File file, FileInputStream is) throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp; String bodyText = null;</p>
<p>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //FileInputStream in = new FileInputStream("D:/lfy_programe/全文检索/SearchFileExample/a/aa.doc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; FileInputStream in = new FileInputStream ("D:/szqxjzhbase/技术测试/新建 Microsoft Word 文档.doc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WordExtractor extractor = new WordExtractor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(is.available());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bodyText = extractor.extractText(is);</p>
<p>//&nbsp;&nbsp;&nbsp; System.out.println("the result length is"+str.length());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("word content===="+bodyText);</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if ( (bodyText != null)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.UN_TOKENIZED)); //取文件的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.add(new Field("contents", bodyText, Field.Store.YES,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field.Index.TOKENIZED));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp; }</p>
<p>}<br />
</p>
<p><br />
&nbsp;</p>
<p>package searchfileexample;</p>
<p><br />
import org.apache.lucene.analysis.Analyzer;<br />
import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
import org.apache.lucene.document.Document;<br />
import org.apache.lucene.index.FilterIndexReader;<br />
import org.apache.lucene.index.IndexReader;<br />
import org.apache.lucene.queryParser.QueryParser;<br />
import org.apache.lucene.search.Hits;<br />
import org.apache.lucene.search.IndexSearcher;<br />
import org.apache.lucene.search.Query;<br />
import org.apache.lucene.search.Searcher;</p>
<p><br />
import java.io.BufferedReader;<br />
import java.io.FileReader;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.util.Date;<br />
import org.apache.lucene.analysis.SimpleAnalyzer;<br />
import org.apache.lucene.analysis.KeywordAnalyzer;<br />
import org.apache.lucene.analysis.WhitespaceAnalyzer;<br />
import org.apache.lucene.document.Fieldable;</p>
<p>/** Simple command-line based search demo. */<br />
public class SearchFiles {</p>
<p>&nbsp; /** Use the norms from one field for all fields.&nbsp; Norms are read into memory,<br />
&nbsp;&nbsp; * using a byte of memory per document per searched field.&nbsp; This can cause<br />
&nbsp;&nbsp; * search of large collections with a large number of fields to run out of<br />
&nbsp;&nbsp; * memory.&nbsp; If all of the fields contain only a single token, then the norms<br />
&nbsp;&nbsp; * are all identical, then single norm vector may be shared. */<br />
&nbsp; private static class OneNormsReader extends FilterIndexReader {<br />
&nbsp;&nbsp;&nbsp; private String field;</p>
<p>&nbsp;&nbsp;&nbsp; public OneNormsReader(IndexReader in, String field) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(in);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.field = field;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public byte[] norms(String field) throws IOException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return in.norms(this.field);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp; private SearchFiles() {}</p>
<p>&nbsp; /** Simple command-line based search demo. */<br />
&nbsp; public static void main(String[] arg) throws Exception {<br />
&nbsp;&nbsp;&nbsp; String[] args = {"a","b"};<br />
&nbsp;&nbsp;&nbsp; String usage =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Usage: java org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] [-norms field]";<br />
&nbsp;&nbsp;&nbsp; if (args.length &gt; 0 &amp;&amp; ("-h".equals(args[0]) || "-help".equals(args[0]))) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(usage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(0);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; String index = "index";//该值是用来存放生成的索引文件的文件夹的名称，不能改动<br />
&nbsp;&nbsp;&nbsp; String field = "contents";//不能修改&nbsp; field&nbsp; 的值<br />
&nbsp;&nbsp;&nbsp; String queries = null;//是用来存放需要检索的关键字的一个文件。<br />
&nbsp;&nbsp;&nbsp; queries = "D:/lfy_programe/全文检索/SearchFileExample/aa.txt";</p>
<p>&nbsp;&nbsp;&nbsp; int repeat = 1;<br />
&nbsp;&nbsp;&nbsp; boolean raw = false;<br />
&nbsp;&nbsp;&nbsp; String normsField = null;</p>
<p>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; args.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("-index".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index = args[i+1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ("-field".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field = args[i+1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ("-queries".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queries = args[i+1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ("-repeat".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeat = Integer.parseInt(args[i+1]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ("-raw".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if ("-norms".equals(args[i])) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; normsField = args[i+1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; IndexReader reader = IndexReader.open(index);</p>
<p>&nbsp;&nbsp;&nbsp; if (normsField != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = new OneNormsReader(reader, normsField);</p>
<p>&nbsp;&nbsp;&nbsp; Searcher searcher = new IndexSearcher(reader);//用来打开索引文件<br />
&nbsp;&nbsp;&nbsp; Analyzer analyzer = new StandardAnalyzer();//分析器<br />
&nbsp;&nbsp;&nbsp; //Analyzer analyzer = new StandardAnalyzer();</p>
<p>&nbsp;&nbsp;&nbsp; BufferedReader in = null;<br />
&nbsp;&nbsp;&nbsp; if (queries != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new BufferedReader(new FileReader(queries));<br />
&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueryParser parser = new QueryParser(field, analyzer);<br />
&nbsp;&nbsp;&nbsp; while (true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queries == null)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // prompt the user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Enter query: ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = in.readLine();//组成查询关键字字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("查询字符串==="+line);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line == null || line.length() == -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = line.trim();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line.length() == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = parser.parse(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Searching for: " + query.toString(field));//每个关键字</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hits hits = searcher.search(query);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (repeat &gt; 0) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // repeat &amp; time as benchmark<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date start = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; repeat; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hits = searcher.search(query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date end = new Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Time: "+(end.getTime()-start.getTime())+"ms");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("查询到：" + hits.length() + " 个含有 ["+query.toString(field)+"]的文档");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final int HITS_PER_PAGE = 10;//查询返回的最大记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int currentNum = 2;//当前记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int start = 0; start &lt; hits.length(); start += HITS_PER_PAGE) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //start = start + currentNum;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int end = Math.min(hits.length(), start + HITS_PER_PAGE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = start; i &lt; end; i++) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (raw) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // output raw format<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("doc="+hits.id(i)+" score="+hits.score(i));//score是接近度的意思<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = hits.doc(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String path = doc.get("path");</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (path != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println((i+1) + ". " + path);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String title = doc.get("title");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp; modified: " + doc.get("modified"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (title != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp; Title: " + doc.get("title"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println((i+1) + ". " + "No path for this document");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queries != null)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // non-interactive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hits.length() &gt; end) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("more (y/n) ? ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = in.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (line.length() == 0 || line.charAt(0) == 'n')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; reader.close();<br />
&nbsp; }<br />
}<br />
</p>
<p><br />
&nbsp;</p>
<p>package searchfileexample;</p>
<p>import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import java.io.*;<br />
import java.util.*;<br />
import org.textmining.text.extraction.WordExtractor;</p>
<p>public class ReadWord extends HttpServlet {<br />
&nbsp; private static final String CONTENT_TYPE = "text/html; charset=GBK";</p>
<p>&nbsp; //Initialize global variables<br />
&nbsp; public void init() throws ServletException {<br />
&nbsp; }</p>
<p>&nbsp; //Process the HTTP Get request<br />
&nbsp; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; response.setContentType(CONTENT_TYPE);<br />
&nbsp;&nbsp;&nbsp; FileInputStream in = new FileInputStream ("D:/lfy_programe/全文检索/SearchFileExample/a/aa.doc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; FileInputStream in = new FileInputStream ("D:/szqxjzhbase/技术测试/新建 Microsoft Word 文档.doc");<br />
&nbsp;&nbsp; WordExtractor extractor = new WordExtractor(); <br />
&nbsp;&nbsp; System.out.println(in.available());<br />
&nbsp; String str = null;<br />
&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; str = extractor.extractText(in);<br />
&nbsp; }<br />
&nbsp; catch (Exception ex) {<br />
&nbsp; }<br />
//&nbsp;&nbsp;&nbsp; System.out.println("the result length is"+str.length()); <br />
&nbsp;&nbsp; System.out.println(str); </p>
<p>&nbsp; }</p>
<p>&nbsp; //Clean up resources<br />
&nbsp; public void destroy() {<br />
&nbsp; }<br />
}</p>
<p>1.英文的模糊查询问题<br />
查询时的关键字的后边加上通配符&nbsp; " * " 就可以了。</p>
<p>2.IndexFiles.java<br />
用来索引文件的java类</p>
<p>3.SearchFiles.java<br />
用来搜索的java类</p>
<p>4.ReadWord.java<br />
使用tm-extractors-0.4.jar来读取word文件</p>
<p><br />
&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/dreamer/aggbug/186938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-03-18 10:35 <a href="http://www.blogjava.net/dreamer/archive/2008/03/18/186938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用tm-extractors-0.4.jar来读取word文件</title><link>http://www.blogjava.net/dreamer/archive/2008/03/18/186937.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Tue, 18 Mar 2008 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2008/03/18/186937.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/186937.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2008/03/18/186937.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/186937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/186937.html</trackback:ping><description><![CDATA[<p>package searchfileexample;</p>
<p>import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import java.io.*;<br />
import java.util.*;<br />
import org.textmining.text.extraction.WordExtractor;</p>
<p>public class ReadWord extends HttpServlet {<br />
&nbsp; private static final String CONTENT_TYPE = "text/html; charset=GBK";</p>
<p>&nbsp; //Initialize global variables<br />
&nbsp; public void init() throws ServletException {<br />
&nbsp; }</p>
<p>&nbsp; //Process the HTTP Get request<br />
&nbsp; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; response.setContentType(CONTENT_TYPE);<br />
&nbsp;&nbsp;&nbsp; FileInputStream in = new FileInputStream ("D:/lfy_programe/全文检索/SearchFileExample/a/aa.doc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; FileInputStream in = new FileInputStream ("D:/szqxjzhbase/技术测试/新建 Microsoft Word 文档.doc");<br />
&nbsp;&nbsp; WordExtractor extractor = new WordExtractor(); <br />
&nbsp;&nbsp; System.out.println(in.available());<br />
&nbsp; String str = null;<br />
&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; str = extractor.extractText(in);<br />
&nbsp; }<br />
&nbsp; catch (Exception ex) {<br />
&nbsp; }<br />
//&nbsp;&nbsp;&nbsp; System.out.println("the result length is"+str.length()); <br />
&nbsp;&nbsp; System.out.println(str); </p>
<p>&nbsp; }</p>
<p>&nbsp; //Clean up resources<br />
&nbsp; public void destroy() {<br />
&nbsp; }<br />
}</p>
<img src ="http://www.blogjava.net/dreamer/aggbug/186937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2008-03-18 10:33 <a href="http://www.blogjava.net/dreamer/archive/2008/03/18/186937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>掌控上传进度的AJAX Upload</title><link>http://www.blogjava.net/dreamer/archive/2007/08/07/135004.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Tue, 07 Aug 2007 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2007/08/07/135004.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/135004.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2007/08/07/135004.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/135004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/135004.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 掌控上传进度的AJAX Uploadcleverpig 发表于 2007-01-08 11:12:14作者:cleverpig&nbsp;&nbsp;&nbsp;&nbsp; 来源:Matrix评论数:83 点击数:5,066&nbsp;&nbsp;&nbsp;&nbsp; 投票总得分:12 投票总人次:4关键字:AJAX,upload,monitor       ...&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamer/archive/2007/08/07/135004.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamer/aggbug/135004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2007-08-07 17:02 <a href="http://www.blogjava.net/dreamer/archive/2007/08/07/135004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax   上传文件</title><link>http://www.blogjava.net/dreamer/archive/2007/08/07/135000.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Tue, 07 Aug 2007 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2007/08/07/135000.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/135000.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2007/08/07/135000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/135000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/135000.html</trackback:ping><description><![CDATA[<a href="http://www.matrix.org.cn/resource/article/2007-01-08/09db6d69-9ec6-11db-ab77-2bbe780ebfbf.html">http://www.matrix.org.cn/resource/article/2007-01-08/09db6d69-9ec6-11db-ab77-2bbe780ebfbf.html</a>
<img src ="http://www.blogjava.net/dreamer/aggbug/135000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2007-08-07 16:54 <a href="http://www.blogjava.net/dreamer/archive/2007/08/07/135000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序下载java程序</title><link>http://www.blogjava.net/dreamer/archive/2007/08/01/133810.html</link><dc:creator>轩辕</dc:creator><author>轩辕</author><pubDate>Wed, 01 Aug 2007 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/dreamer/archive/2007/08/01/133810.html</guid><wfw:comment>http://www.blogjava.net/dreamer/comments/133810.html</wfw:comment><comments>http://www.blogjava.net/dreamer/archive/2007/08/01/133810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamer/comments/commentRss/133810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamer/services/trackbacks/133810.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_2_76_Open_Image onclick="this.style.display='none'; Codehighlighter1_2_76_Open_Text.style.display='none'; Codehighlighter1_2_76_Closed_Image.style.display='inline'; Codehighlighter1_2_76_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2_76_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_76_Closed_Text.style.display='none'; Codehighlighter1_2_76_Open_Image.style.display='inline'; Codehighlighter1_2_76_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;</span><span id=Codehighlighter1_2_76_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_2_76_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;创建日期&nbsp;2006-1-11<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;更改所生成文件模板为<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;窗口&nbsp;&gt;&nbsp;首选项&nbsp;&gt;&nbsp;Java&nbsp;&gt;&nbsp;代码生成&nbsp;&gt;&nbsp;代码和注释<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;com.abc.cc.util.file&nbsp;;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServlet;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.ServletOutputStream;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.FileInputStream;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.abc.callcenter.DataStatistic.Export.CreatUDStatisticExport;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.abc.callcenter.uds.unitedealwith.UniteUtil;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_445_516_Open_Image onclick="this.style.display='none'; Codehighlighter1_445_516_Open_Text.style.display='none'; Codehighlighter1_445_516_Closed_Image.style.display='inline'; Codehighlighter1_445_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_445_516_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_445_516_Closed_Text.style.display='none'; Codehighlighter1_445_516_Open_Image.style.display='inline'; Codehighlighter1_445_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_445_516_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_445_516_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;创建日期：2006-2-9<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;功　　能：工作台&nbsp;&gt;&nbsp;文档管理&nbsp;&gt;&nbsp;文件下载<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;asx<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_556_2611_Open_Image onclick="this.style.display='none'; Codehighlighter1_556_2611_Open_Text.style.display='none'; Codehighlighter1_556_2611_Closed_Image.style.display='inline'; Codehighlighter1_556_2611_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_556_2611_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_556_2611_Closed_Text.style.display='none'; Codehighlighter1_556_2611_Open_Image.style.display='inline'; Codehighlighter1_556_2611_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Down&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;HttpServlet&nbsp;</span><span id=Codehighlighter1_556_2611_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_556_2611_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_636_2268_Open_Image onclick="this.style.display='none'; Codehighlighter1_636_2268_Open_Text.style.display='none'; Codehighlighter1_636_2268_Closed_Image.style.display='inline'; Codehighlighter1_636_2268_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_636_2268_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_636_2268_Closed_Text.style.display='none'; Codehighlighter1_636_2268_Open_Image.style.display='inline'; Codehighlighter1_636_2268_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;doGet(HttpServletRequest&nbsp;request&nbsp;,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span id=Codehighlighter1_636_2268_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_636_2268_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">logining&nbsp;Down<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/html;&nbsp;charset=GBK</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;downfile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request.getRealPath(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/exportfile/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;TimeTool.getCurrentDateForEight()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;StringTool.getExportFileName(Integer.parseInt(request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fileName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)))&nbsp;;<br><img id=Codehighlighter1_931_981_Open_Image onclick="this.style.display='none'; Codehighlighter1_931_981_Open_Text.style.display='none'; Codehighlighter1_931_981_Closed_Image.style.display='inline'; Codehighlighter1_931_981_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_931_981_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_931_981_Closed_Text.style.display='none'; Codehighlighter1_931_981_Open_Image.style.display='inline'; Codehighlighter1_931_981_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_931_981_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_931_981_Open_Text><span style="COLOR: #000000">{downfile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String(downfile.getBytes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GBK</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)</span><span id=Codehighlighter1_1000_1001_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1000_1001_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">downfile&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">downfile);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;buildFilename(downfile)&nbsp;;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fileName&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fileName);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;strBeginDate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">excel_begindate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">起始日期</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;strEndDate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">excel_enddate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">结束日期</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;strUnite_dept&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">excel_department_name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">部门</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1365_1439_Open_Image onclick="this.style.display='none'; Codehighlighter1_1365_1439_Open_Text.style.display='none'; Codehighlighter1_1365_1439_Closed_Image.style.display='inline'; Codehighlighter1_1365_1439_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1365_1439_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1365_1439_Closed_Text.style.display='none'; Codehighlighter1_1365_1439_Open_Image.style.display='inline'; Codehighlighter1_1365_1439_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span id=Codehighlighter1_1365_1439_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1365_1439_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strUnite_dept&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;UniteUtil.Query_NameDepartment(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">strUnite_dept);;<br><img id=Codehighlighter1_1458_1486_Open_Image onclick="this.style.display='none'; Codehighlighter1_1458_1486_Open_Text.style.display='none'; Codehighlighter1_1458_1486_Closed_Image.style.display='inline'; Codehighlighter1_1458_1486_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1458_1486_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1458_1486_Closed_Text.style.display='none'; Codehighlighter1_1458_1486_Open_Image.style.display='inline'; Codehighlighter1_1458_1486_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)</span><span id=Codehighlighter1_1458_1486_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1458_1486_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreatUDStatisticExport&nbsp;cue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CreatUDStatisticExport();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cue.queryPrintInfo(strBeginDate,strEndDate,strUnite_dept,request);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">logining&nbsp;Down<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;<br><img id=Codehighlighter1_1677_2243_Open_Image onclick="this.style.display='none'; Codehighlighter1_1677_2243_Open_Text.style.display='none'; Codehighlighter1_1677_2243_Closed_Image.style.display='inline'; Codehighlighter1_1677_2243_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1677_2243_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1677_2243_Closed_Text.style.display='none'; Codehighlighter1_1677_2243_Open_Image.style.display='inline'; Codehighlighter1_1677_2243_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1677_2243_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1677_2243_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">response.encodeURL(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String(fileName.getBytes(),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">iso-8859-1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.reset();&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">APPLICATION/OCTET-STREAM</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Disposition</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">attachment;&nbsp;filename=\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">&nbsp;+&nbsp;fileName&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletOutputStream&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;response.getOutputStream();&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;inStream&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileInputStream(downfile);&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">循环取出流中的数据&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len;&nbsp;<br><img id=Codehighlighter1_2166_2200_Open_Image onclick="this.style.display='none'; Codehighlighter1_2166_2200_Open_Text.style.display='none'; Codehighlighter1_2166_2200_Closed_Image.style.display='inline'; Codehighlighter1_2166_2200_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2166_2200_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2166_2200_Closed_Text.style.display='none'; Codehighlighter1_2166_2200_Open_Image.style.display='inline'; Codehighlighter1_2166_2200_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">inStream.read(b&nbsp;,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;,&nbsp;b.length))&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_2166_2200_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2166_2200_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(b,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,len);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inStream.close();&nbsp;<br><img id=Codehighlighter1_2264_2265_Open_Image onclick="this.style.display='none'; Codehighlighter1_2264_2265_Open_Text.style.display='none'; Codehighlighter1_2264_2265_Closed_Image.style.display='inline'; Codehighlighter1_2264_2265_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2264_2265_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2264_2265_Closed_Text.style.display='none'; Codehighlighter1_2264_2265_Open_Image.style.display='inline'; Codehighlighter1_2264_2265_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)&nbsp;</span><span id=Codehighlighter1_2264_2265_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2264_2265_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_2349_2382_Open_Image onclick="this.style.display='none'; Codehighlighter1_2349_2382_Open_Text.style.display='none'; Codehighlighter1_2349_2382_Closed_Image.style.display='inline'; Codehighlighter1_2349_2382_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2349_2382_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2349_2382_Closed_Text.style.display='none'; Codehighlighter1_2349_2382_Open_Image.style.display='inline'; Codehighlighter1_2349_2382_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;doPost(HttpServletRequest&nbsp;request&nbsp;,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span id=Codehighlighter1_2349_2382_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2349_2382_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doGet(request&nbsp;,&nbsp;response)&nbsp;;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_2387_2457_Open_Image onclick="this.style.display='none'; Codehighlighter1_2387_2457_Open_Text.style.display='none'; Codehighlighter1_2387_2457_Closed_Image.style.display='inline'; Codehighlighter1_2387_2457_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2387_2457_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2387_2457_Closed_Text.style.display='none'; Codehighlighter1_2387_2457_Open_Image.style.display='inline'; Codehighlighter1_2387_2457_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2387_2457_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_2387_2457_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;转换上传文件的文件名<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;sou<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;ts<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;String<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_2508_2609_Open_Image onclick="this.style.display='none'; Codehighlighter1_2508_2609_Open_Text.style.display='none'; Codehighlighter1_2508_2609_Closed_Image.style.display='inline'; Codehighlighter1_2508_2609_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2508_2609_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2508_2609_Closed_Text.style.display='none'; Codehighlighter1_2508_2609_Open_Image.style.display='inline'; Codehighlighter1_2508_2609_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;String&nbsp;buildFilename(String&nbsp;sou)&nbsp;</span><span id=Codehighlighter1_2508_2609_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2508_2609_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_2541_2592_Open_Image onclick="this.style.display='none'; Codehighlighter1_2541_2592_Open_Text.style.display='none'; Codehighlighter1_2541_2592_Closed_Image.style.display='inline'; Codehighlighter1_2541_2592_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2541_2592_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2541_2592_Closed_Text.style.display='none'; Codehighlighter1_2541_2592_Open_Image.style.display='inline'; Codehighlighter1_2541_2592_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(sou.indexOf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_2541_2592_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2541_2592_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sou&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sou.substring(sou.indexOf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;sou;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.blogjava.net/dreamer/aggbug/133810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamer/" target="_blank">轩辕</a> 2007-08-01 15:23 <a href="http://www.blogjava.net/dreamer/archive/2007/08/01/133810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>