tika讀取文件內容


Tika是一個內容抽取的工具集合(a toolkit for text extracting)。它集成了POIPdfbox 並且爲文本抽取工作提供了一個統一的界面。其次,Tika也提供了便利的擴展API,用來豐富其對第三方文件格式的支持。

在當前的0.2-SNAPSHOT版本中, Tika提供了對如下文件格式的支持:

  • PDF - 通過Pdfbox
  • MS-* - 通過POI
  • HTML - 使用nekohtml將不規範的html整理成爲xhtml
  • OpenOffice 格式 - Tika提供
  • Archive - zip, tar, gzip, bzip等
  • RTF - Tika提供
  • Java class - Class解析由ASM完成
  • Image - 只支持圖像的元數據抽取
  • XML

Tika的API十分便捷,核心是Parser interface,其中定義了一個parse方法:
public void parse(InputStream stream, ContentHandler handler, Metadata metadata)
用stream參數傳遞需要解析的文件流, 文本內容會被傳入handler,而元數據會更新至metadata。

可以使用Tika的ParserUtils工具來根據文件的mime-type來得到一個適當的Parser來進行解析工作。或者Tika還提供了一個AutoDetectParser根據不同的二進制文件的特殊格式 (比如說Magic Code),來尋找適合的Parser。

提示:主要tika-xx.jar,解析相應的文件必須有相應的jar.例如:excel文件必須用到poi-xx.jar

相關包下載地址http://download.csdn.net/download/an74520/7658941

package com.miracle.tools;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;
import java.io.*;

/**
 * Created with IntelliJ IDEA.
 * User: lianan
 * Date: 14-3-3
 * Time: 上午10:05
 * To change this template use File | Settings | File Templates.
 */
public class TiKaUtil {

    public static String parseFile(File file){
        Parser parser = new AutoDetectParser();
        InputStream input = null;
        try{
            Metadata metadata = new Metadata();
            metadata.set(Metadata.CONTENT_ENCODING, "utf-8");
            metadata.set(Metadata.RESOURCE_NAME_KEY, file.getName());
            input = new FileInputStream(file);
            ContentHandler handler = new BodyContentHandler();//當文件大於100000時,new BodyContentHandler(1024*1024*10); 
            ParseContext context = new ParseContext();
            context.set(Parser.class,parser);
            parser.parse(input,handler, metadata,context);
            for(String name:metadata.names()) {
                System.out.println(name+":"+metadata.get(name));
            }
            System.out.println(handler.toString());
            return handler.toString();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(input!=null)input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;

    }

    public static void main(String argt0[])throws Exception{
        parseFile(new File("E:\\學習手冊pdf\\HOST.txt"));
    }
}


發佈了92 篇原創文章 · 獲贊 15 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章