`

lucene根据文件类型自动解析的工厂类

阅读更多
阅读本章之前  请先参考其他几篇解析各类文档的章节
http://wuzhaohuixy-qq-com.iteye.com/blog/780437
http://wuzhaohuixy-qq-com.iteye.com/blog/780431
http://wuzhaohuixy-qq-com.iteye.com/blog/780426
http://wuzhaohuixy-qq-com.iteye.com/blog/780423

这里主要讲解根据文件类型自动解析文档(ppt , pdf , txt,doc,html,htm)

用java中的反射机制
先准备属性文件
parser.properties
txt=com.cs.TextParser
doc=com.cs.DocParser
rtf=com.cs.DocParser
ppt=com.cs.PPTParser
pdf=com.cs.PdfParser
html=com.cs.EasyHtmlParser
htm=com.cs.EasyHtmlParser


工厂类ParserFactory
package com.cs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;

public class ParserFactory {
	//该类一加载就把配置文件读到内存
	static Properties ps ;
	static{
		ps = new Properties() ;
		try {
			ps.load(new FileInputStream("E:\\EclipseStudyWorkspace\\LuceneParse\\src\\parser.properties")) ;
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//该方法根据文件的后缀名确定该文件的类型 然后格局配置文件的类型分词建立索引
	public static Parsable getParser(File file){
		String ext = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf(".") + 1) ;
		 
		String className = ps.getProperty(ext) ;
		Parsable parser = null ;
		if (className != null){
			try {
				//此处不能直接Class.forName().newInstance()
				//原因:要传参数
				//所以要先拿到构造器 然后根据构造器区newInstance() 此时就可以传入参数了
				Class clazz = Class.forName(className) ;
				//根据参数的不同拿到不同的构造器
				Constructor constructor = clazz.getConstructor(new Class[]{File.class}) ;//此处传入的参数是Class类型
				parser = (Parsable)constructor.newInstance(new Object[]{file}) ;
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return parser ;
	}
}


测试类
package com.cs;

import java.io.File;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Parsable parser = null ;
		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\搜索引擎-基础.ppt"));
//		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\123.pdf"));
//		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\www.htm"));
//		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\XPDF使用文档.doc"));
//		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\文档.txt"));
//		parser = ParserFactory.getParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\BaseItem.html"));
		
		
		System.out.println(" content : "+parser.getContent()) ;
	}

}
分享到:
评论

相关推荐

    ELK日志服务的介绍ELK日志服务的介绍

    ELK日志服务能够统一收集分布式系统中的日志文件,并对其进行实时分析和展示。 Elasticsearch是ELK日志服务的核心组件,负责数据的存储和索引。它是一个实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能...

    .NET平台上的文件抽取框架toxy.zip

    ParserFactory是工厂模式类,负责所有解析器的实例化工作,它会根据传入文件的扩展名自动寻找合适的解析器。下面展示一下PDF文档的抽取代码,一样极其简单:123string path = TestDataSample.GetPdfPath("Sample1....

    hibernate-search-3.2.0.Final-dist.tar

    2. **添加依赖**:将解压后的JAR文件添加到项目的类路径中,包括Hibernate ORM、Lucene以及其他相关依赖。 3. **配置Hibernate Search**:在Hibernate配置文件中指定搜索引擎工厂和索引目录等参数。 4. **实体类注解...

    Solr.3.1.Cookbook_Code

    10. **自定义插件**:Solr允许开发人员编写自定义插件,如查询解析器、筛选器工厂、高亮器等,以满足特定需求。 通过《Solr.3.1.Cookbook》中的源代码,你可以动手实践上述知识点,加深理解和应用。如果你能深入...

    巴巴运动网项目jar包完整版

    8. **Javassist** (javassist-3.4.GA.jar): Javassist 是一个Java字节码操作和分析框架,它允许开发者在运行时修改类或者创建新的类。在Spring和其他AOP框架中,Javassist常用于动态生成代理类。 9. **MySQL ...

    solr4.7服务器

    Solr4.7服务器是基于Java的开源搜索和分析引擎,它在Apache Lucene库的基础上构建,用于提供高效、可扩展的全文检索、数据分析和分布式搜索服务。此版本的Solr适用于Java运行环境JDK1.6,这表明它是对较旧Java版本的...

    SOLR搭建企业搜索平台

    SOLR(Apache Solr)是一款开源的企业级全文搜索引擎,基于Lucene库,提供高效、可扩展的搜索和分析功能。本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR...

    最新版linux solr-7.7.3.tgz

    Solr 支持插件机制,允许开发人员自定义请求处理器、查询解析器、筛选器工厂等,以满足特定业务需求。 综上所述,Linux Solr 7.7.3 是一个强大的搜索平台,适用于各种需要高效检索和分析文本数据的场景。其在Linux...

    solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0

    2. **智能分析**:它采用了基于词频的动态策略,能够自动识别新词,同时兼顾常用短语的分词。 3. **扩展性**:除了基本的分词功能,Ik Analyzer还提供了诸如过滤、去停用词、词性标注等扩展插件,可以满足更复杂的...

    自动搜寻

    标题中的“自动搜寻”可能指的是在编程领域中...在AutoSearch-master这个项目中,可能包含了实现这些功能的源代码、配置文件以及相关文档,通过阅读和分析这个项目的源码,可以更深入地理解和学习自动搜寻的实现细节。

    hibernate-src.zip

    4. **hibernate-tools**:提供了代码生成和逆向工程的功能,可以帮助开发者快速生成基于数据库表的实体类和映射文件,或者根据实体类自动生成数据库表结构。 5. **hibernate-annotations**与**hibernate-jpa-2.1-...

    2019年一线互联网公司Java高级面试题总结

    根据给定文件的信息,我们可以将知识点分为几个大类:Java基础知识、JVM相关知识、Spring框架、数据库技术、分布式系统及缓存管理等。接下来,我会逐一解析这些知识点。 ### Java基础知识 #### 1. HashCode与...

    黑马面试宝典知识点复习

    - **工厂模式**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - **观察者模式**:当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### Linux - **命令行操作**:ls、cd、mkdir等...

    XXX个人简历.doc

    2. **高级Java知识**:掌握了泛型、反射、动态代理和类加载,这些都是Java的高级特性,用于实现动态类型、元编程和框架设计。 3. **Web开发技术**:熟练使用JSP、Servlet和JSTL,这些都是Java服务器端开发的重要...

    Adaptive-News-Storage-System-in-Java-and-XML-源码.rar

    这个系统可能旨在高效地处理、存储和检索新闻数据,同时具备根据需求变化自动调整的能力。让我们深入探讨相关的知识点。 首先,Java是一种广泛使用的面向对象的编程语言,以其跨平台兼容性和丰富的类库而闻名。在这...

    ZendFramework中文文档

    4.2.1. Zend_Cache 工厂方法 4.2.2. 标记纪录 4.2.3. 缓存清理 4.3. Zend_Cache前端 4.3.1. Zend_Cache_Core 4.3.1.1. 简介 4.3.1.2. 可用选项 4.3.1.3. 例子 4.3.2. Zend_Cache_Frontend_Output 4.3.2.1. ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    搜索引擎技术:Lucene.Net、多线程开发、爬虫技术、网页分析、正则表达式、Log4Net日志框架、Quartz.Net定时作业调度。 大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站...

    TesisTaldoc:进行计算机工程论文的存储库

    1. **设计模式**:作为一个Java项目,TesisTaldoc可能会采用常见的设计模式,如工厂模式(用于创建对象)、单例模式(确保类只有一个实例)或MVC(模型-视图-控制器)模式(用于处理用户界面与数据的交互)。...

Global site tag (gtag.js) - Google Analytics