首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Lucene入门一[怎么读取各种格式的文档]

2012-10-27 
Lucene入门一[如何读取各种格式的文档]1、首先定义一个读取文档的公共接口ContentHandler。package org.autu

Lucene入门一[如何读取各种格式的文档]
1、首先定义一个读取文档的公共接口ContentHandler。

package org.autumn.lucene.reader;import java.io.InputStream;public interface ContentHandler {String getContent(InputStream is);}


2、读取txt格式的文本文件。
package org.autumn.lucene.reader.impl;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import org.autumn.lucene.reader.ContentHandler;public class TextContentHandler implements ContentHandler {@Overridepublic String getContent(InputStream is) {        StringBuilder content = new StringBuilder();        try {            BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));            String s1 = null;            while ((s1 = br.readLine()) != null) {                content.append(s1 + "\r");            }            br.close();            return content.toString();        } catch (IOException e) {            e.printStackTrace();        }        return null;}}


3、swing读取rtf格式的文件。
package org.autumn.lucene.reader.impl;import java.io.IOException;import java.io.InputStream;import javax.swing.text.BadLocationException;import javax.swing.text.DefaultStyledDocument;import javax.swing.text.rtf.RTFEditorKit;import org.autumn.lucene.reader.ContentHandler;public class RTFContentHandler implements ContentHandler {@Overridepublic String getContent(InputStream is) {try {DefaultStyledDocument styledDoc = new DefaultStyledDocument();new RTFEditorKit().read(is, styledDoc, 0);byte[] bodyText = styledDoc.getText(0, styledDoc.getLength()).getBytes("ISO8859_1");return new String(bodyText, "gbk");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (BadLocationException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}


4、PDFBox读取PDF文件。
package org.autumn.lucene.reader.impl;import java.io.IOException;import java.io.InputStream;import org.apache.pdfbox.cos.COSDocument;import org.apache.pdfbox.pdfparser.PDFParser;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.util.PDFTextStripper;import org.autumn.lucene.reader.ContentHandler;public class PDFContentHandler  implements ContentHandler{@Overridepublic String getContent(InputStream is) {PDFParser parser;try {parser = new PDFParser(is);parser.parse();COSDocument cosDoc = parser.getDocument();if (cosDoc.isEncrypted()) {throw new RuntimeException("the file may be encrypted!");}PDFTextStripper stripper = new PDFTextStripper();String docText = stripper.getText(new PDDocument(cosDoc));return docText;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}


5、POI读取word、excel文件。
package org.autumn.lucene.reader.impl;import java.io.IOException;import java.io.InputStream;import org.apache.poi.hwpf.extractor.WordExtractor;import org.autumn.lucene.reader.ContentHandler;public class Word2003ContentHandler implements ContentHandler{@Overridepublic String getContent(InputStream is) {WordExtractor ex;try {ex = new WordExtractor(is);String bodyText = ex.getText();return bodyText;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}


package org.autumn.lucene.reader.impl;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.UUID;import org.apache.poi.POIXMLDocument;import org.apache.poi.POIXMLTextExtractor;import org.apache.poi.openxml4j.exceptions.OpenXML4JException;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import org.apache.xmlbeans.XmlException;import org.autumn.lucene.reader.ContentHandler;public class Word2007ContentHandler implements ContentHandler {@Overridepublic String getContent(InputStream is) {String fileName = UUID.randomUUID() + ".docx";String tmpFilePath = System.getProperty("java.io.tmpdir") + fileName;try {FileOutputStream out = new FileOutputStream(tmpFilePath);int num = 0;byte[] buffer = new byte[1024];while ((num = is.read(buffer)) != -1) {out.write(buffer, 0, num);}OPCPackage opcPackage = POIXMLDocument.openPackage(tmpFilePath);POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);String bodyText = extractor.getText();System.out.println("delete file : " + tmpFilePath);new File(tmpFilePath).deleteOnExit();return bodyText;} catch (IOException e) {e.printStackTrace();} catch (XmlException e) {e.printStackTrace();} catch (OpenXML4JException e) {e.printStackTrace();}return null;}}


package org.autumn.lucene.reader.impl;import java.io.IOException;import java.io.InputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.autumn.lucene.reader.ContentHandler;public class Excel2003ContentHandler implements ContentHandler {@Overridepublic String getContent(InputStream is) {StringBuffer content = new StringBuffer();HSSFWorkbook workbook;try {workbook = new HSSFWorkbook(is);for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {if (null != workbook.getSheetAt(numSheets)) {HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheetfor (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {if (aSheet.getRow(rowNumOfSheet) != null) {HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一个行for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {if (aRow.getCell(cellNumOfRow) != null) {HSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值content.append(aCell.toString() + " ");}}content.append("\r");}}}}return content.toString();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}


package org.autumn.lucene.reader.impl;import java.io.IOException;import java.io.InputStream;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.autumn.lucene.reader.ContentHandler;public class Excel2007ContentHandler implements ContentHandler {@Overridepublic String getContent(InputStream is) {StringBuffer content = new StringBuffer();try {XSSFWorkbook xwb = new XSSFWorkbook(is);for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {XSSFSheet xSheet = xwb.getSheetAt(numSheet);if (xSheet == null) {continue;}for (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {XSSFRow xRow = xSheet.getRow(rowNum);if (xRow == null) {continue;}for (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {XSSFCell xCell = xRow.getCell(cellNum);if (xCell == null) {continue;}content.append(xCell.toString() + " ");}content.append("\r");}}} catch (IOException e) {e.printStackTrace();}return content.toString();}}


7、跑测试用例。
package org.autumn.lucene.test;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import org.autumn.lucene.reader.ContentHandler;import org.autumn.lucene.reader.impl.Excel2003ContentHandler;import org.autumn.lucene.reader.impl.Excel2007ContentHandler;import org.autumn.lucene.reader.impl.PDFContentHandler;import org.autumn.lucene.reader.impl.RTFContentHandler;import org.autumn.lucene.reader.impl.TextContentHandler;import org.autumn.lucene.reader.impl.Word2003ContentHandler;import org.autumn.lucene.reader.impl.Word2007ContentHandler;import org.junit.Test;public class MultiFileReaderTest {private String getDirectory() {return this.getClass().getResource("/").getPath() + "..\\resource";}@Testpublic void testMSWord2003Reader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\(端午节)放假通知110525.doc");ContentHandler handler = new Word2003ContentHandler();System.out.println(handler.getContent(is));System.out.println("Word 2003 Content Display!\r\r\r");}@Testpublic void testMSWord2007Reader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\系统功能设计.docx");ContentHandler handler = new Word2007ContentHandler();System.out.println(handler.getContent(is));System.out.println("Word 2007 Content Display!\r\r\r");}@Testpublic void testMSExcel2003Reader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\通讯录2011.5.30.xls");ContentHandler handler = new Excel2003ContentHandler();System.out.println(handler.getContent(is));System.out.println("Excel 2003 Content Display!\r\r\r");}@Testpublic void testMSExcel2007Reader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\代征系统插件.xlsx");ContentHandler handler = new Excel2007ContentHandler();System.out.println(handler.getContent(is));System.out.println("Excel 2007 Content Display!\r\r\r");}@Testpublic void testPDFReader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\petstoreModel.pdf");ContentHandler handler = new PDFContentHandler();System.out.println(handler.getContent(is));System.out.println("PDF Content Display!\r\r\r");}@Testpublic void testRTFReader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\带薪年假通知2011.5.10.rtf");ContentHandler handler = new RTFContentHandler();System.out.println(handler.getContent(is));System.out.println("RTF Content Display!\r\r\r");}@Testpublic void testTextReader() throws FileNotFoundException {InputStream is = new FileInputStream(getDirectory() + "\\petstore表结构.txt");ContentHandler handler = new TextContentHandler();System.out.println(handler.getContent(is));System.out.println("Text Content Display!\r\r\r");}}


热点排行