tika 解析文件

tika怎样加载Parser实现类的,怎样根据文档的mime类型调用相应的Parser实现类,本文接着分析

先熟悉一下tika的解析类的相关接口和类的UML模型:

public class AutoDetectParserTest {

	public static void main(String[] args) {
		InputStream is = null;
		try {
			//创建解析器,使用AutoDetectParser可以自动检测一个最合适的解析器  
			Parser parser  = new AutoDetectParser();
			File file = new File("c:/我的生词本.doc");
			//指定解析文件中的文档内容
		////当文件大于100000时,new BodyContentHandler(1024*1024*1024);  
//			BodyContentHandler handler = new BodyContentHandler();
//			BodyContentHandler handler = new BodyContentHandler(1024*1024*1024);
			//WriteOutContentHandler就是用来处理文件大小的
			BodyContentHandler handler = new BodyContentHandler(new WriteOutContentHandler(1024*1024*1024));
			
			Metadata metadata =  new  Metadata();
			//指定最基本的变量信息(即存放一个所使用的解析器对象)
			ParseContext parsecontext = new ParseContext();
			is = new FileInputStream(file);
			//InputStream-----指定文件输入流  
            //ContentHandler--指定要解析文件的哪一个内容,它有一个实现类叫做BodyContentHandler,即专门用来解析文档内容的  
            //Metadata--------指定解析文件时,存放解析出来的元数据的Metadata对象  
            //ParseContext----该对象用于存放一些变量信息,该对象最少也要存放所使用的解析器对象,这也是其存放的最基本的变量信息 
			parser.parse(is, handler, metadata, parsecontext);
			//打印元数据  
			for(String name:metadata.names()) {
				System.out.println(name+":"+metadata.get(name));
			}
			//打印解析到的文档内容  
			System.out.println(handler.toString());
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (TikaException e) {
			e.printStackTrace();
		}finally{
			if(is!=null){
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}

 整个解析的流程是

 

一、AutoDetectParser的parse方法:首先检测文件的mime类型,然后将解析任务交给基类CompositeParser的parse方法

 

二、AutoDetectParser的基类CompositeParser的parse方法:根据参数里面的mime类型获取解析类DefaultParser(支持所有已经注册的mime类型,由List<Parser> parsers成员提供)

扫描二维码关注公众号,回复: 597796 查看本文章

 

三、调用DefaultParser的parse方法(DefaultParser默认执行父类的parse方法),即基类CompositeParser的parse方法,根据参数里面的mime类型获取具体解析类

 

四、最后执行具体解析类的parse方法

猜你喜欢

转载自hbiao68.iteye.com/blog/2113901