阅读本章之前 请先参考其他几篇解析各类文档的章节
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日志服务能够统一收集分布式系统中的日志文件,并对其进行实时分析和展示。 Elasticsearch是ELK日志服务的核心组件,负责数据的存储和索引。它是一个实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能...
ParserFactory是工厂模式类,负责所有解析器的实例化工作,它会根据传入文件的扩展名自动寻找合适的解析器。下面展示一下PDF文档的抽取代码,一样极其简单:123string path = TestDataSample.GetPdfPath("Sample1....
2. **添加依赖**:将解压后的JAR文件添加到项目的类路径中,包括Hibernate ORM、Lucene以及其他相关依赖。 3. **配置Hibernate Search**:在Hibernate配置文件中指定搜索引擎工厂和索引目录等参数。 4. **实体类注解...
10. **自定义插件**:Solr允许开发人员编写自定义插件,如查询解析器、筛选器工厂、高亮器等,以满足特定需求。 通过《Solr.3.1.Cookbook》中的源代码,你可以动手实践上述知识点,加深理解和应用。如果你能深入...
8. **Javassist** (javassist-3.4.GA.jar): Javassist 是一个Java字节码操作和分析框架,它允许开发者在运行时修改类或者创建新的类。在Spring和其他AOP框架中,Javassist常用于动态生成代理类。 9. **MySQL ...
Solr4.7服务器是基于Java的开源搜索和分析引擎,它在Apache Lucene库的基础上构建,用于提供高效、可扩展的全文检索、数据分析和分布式搜索服务。此版本的Solr适用于Java运行环境JDK1.6,这表明它是对较旧Java版本的...
SOLR(Apache Solr)是一款开源的企业级全文搜索引擎,基于Lucene库,提供高效、可扩展的搜索和分析功能。本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR...
Solr 支持插件机制,允许开发人员自定义请求处理器、查询解析器、筛选器工厂等,以满足特定业务需求。 综上所述,Linux Solr 7.7.3 是一个强大的搜索平台,适用于各种需要高效检索和分析文本数据的场景。其在Linux...
2. **智能分析**:它采用了基于词频的动态策略,能够自动识别新词,同时兼顾常用短语的分词。 3. **扩展性**:除了基本的分词功能,Ik Analyzer还提供了诸如过滤、去停用词、词性标注等扩展插件,可以满足更复杂的...
标题中的“自动搜寻”可能指的是在编程领域中...在AutoSearch-master这个项目中,可能包含了实现这些功能的源代码、配置文件以及相关文档,通过阅读和分析这个项目的源码,可以更深入地理解和学习自动搜寻的实现细节。
4. **hibernate-tools**:提供了代码生成和逆向工程的功能,可以帮助开发者快速生成基于数据库表的实体类和映射文件,或者根据实体类自动生成数据库表结构。 5. **hibernate-annotations**与**hibernate-jpa-2.1-...
根据给定文件的信息,我们可以将知识点分为几个大类:Java基础知识、JVM相关知识、Spring框架、数据库技术、分布式系统及缓存管理等。接下来,我会逐一解析这些知识点。 ### Java基础知识 #### 1. HashCode与...
- **工厂模式**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - **观察者模式**:当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### Linux - **命令行操作**:ls、cd、mkdir等...
2. **高级Java知识**:掌握了泛型、反射、动态代理和类加载,这些都是Java的高级特性,用于实现动态类型、元编程和框架设计。 3. **Web开发技术**:熟练使用JSP、Servlet和JSTL,这些都是Java服务器端开发的重要...
这个系统可能旨在高效地处理、存储和检索新闻数据,同时具备根据需求变化自动调整的能力。让我们深入探讨相关的知识点。 首先,Java是一种广泛使用的面向对象的编程语言,以其跨平台兼容性和丰富的类库而闻名。在这...
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. ...
搜索引擎技术:Lucene.Net、多线程开发、爬虫技术、网页分析、正则表达式、Log4Net日志框架、Quartz.Net定时作业调度。 大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站...
1. **设计模式**:作为一个Java项目,TesisTaldoc可能会采用常见的设计模式,如工厂模式(用于创建对象)、单例模式(确保类只有一个实例)或MVC(模型-视图-控制器)模式(用于处理用户界面与数据的交互)。...