Tika支持多种功能:

文档类型检测 内容提取 元数据提取 语言检测

重要特点:

统一解析器接口:Tika封装在一个单一的解析器接口的第三方解析器库。由于这个特征,用户逸出从选择合适的解析器库的负担,并使用它,根据所遇到的文件类型。

低内存占用:Tika因此消耗更少的内存资源也很容易嵌入Java应用程序。也可以用Tika平台像移动那样PDA资源少,运行该应用程序。

快速处理:从应用连结内容检测和提取可以预期的。

灵活元数据:Tika理解所有这些都用来描述文件的元数据模型。

解析器集成:Tika可以使用可在单一应用程序中每个文件类型的各种解析器库。

MIME类型检测: Tika可以检测并从所有包括在MIME标准的媒体类型中提取内容。

语言检测: Tika包括语言识别功能,因此可以在一个多语种网站基于语言类型的文档中使用。

使用Parser接口内容提取

CompositeParser

给出的图表显示Tika通用解析器类CompositeParser 主AutoDetectParser。由于CompositeParser类遵循复合设计模式,可以用一组解析器实例作为一个单独的解析器。CompositeParser类也可以访问所有实现解析器接口的类。

AutoDetectParser

这是CompositeParser的子类,它提供了自动类型检测。使用此功能,AutoDetectParser自动发送收到的文件到使用该复合方法适当分析器类。

parse()方法

除了parseToString(),还可以使用分析器接口的parse()方法。该方法的原型如下所示。

voidparse(

InputStream stream,

ContentHandler handler,

Metadata metadata,

ParseContext context)throws IOException, SAXException, TikaException

我们简要解释方法参数:

stream,从需要被解析文档创建的InputStream实例

handler,接收从输入文档解析XHTML SAX事件序列的ContentHandler对象,负责处理事件并以特定的形式导出结果。

metadata,元数据对象,它在解析器中传递元数据属性

context,带有上下文相关信息的ParseContext实例,用于自定义解析过程。

如果从输入流读取失败,则parse方法抛出IOException异常,从流中获取的文档不能被解析抛TikaException异常,处理器不能处理事件则抛SAXException异常。

当解析文档时,Tika尽量重用已经存在的解析库,如Apache POI或PDFBox。因此,大多数解析器实现类仅适配这些外部类库。下面,我们将了解如何使用处理程序和元数据参数来提取文档的内容和元数据。为了方便,我们能使用Tika的门面类调用解析器Api。

0.Tika的maven地址:

org.apache.tika

tika-parsers

1.17

1.简单的用法

1.1获取文件类型

Tika支持MIME所提供的所有互联网媒体文件类型。

/*** 检测文件类型的用法*/

public static voidtest1(){

File file= new File("G:/tikatest/test.mp4");

Tika tika= newTika();

String filetype= null;try{

filetype=tika.detect(file);

}catch(IOException e) {

e.printStackTrace();

}

System.out.println(filetype);

}

结果:

video/mp4

我们将后缀去掉改为test也可以检测出同样的结果,其根据文件拓展名与文件内容检测。

1.2提取Txt文本内容

解析文件,一般用于Tika外观facade类的parseToString()方法。

/*** 读取txt内容*/

public static voidtest2(){

File file= new File("G:/tikatest/test.txt");

Tika tika= newTika();

String filecontent= null;try{

filecontent=tika.parseToString(file);

}catch(IOException e) {

e.printStackTrace();

}catch(TikaException e) {

e.printStackTrace();

}

System.out.println("Extracted Content: " +filecontent);

}

结果:

Extracted Content: 111

222

333

444

555

666

补充:与之等价的FileUtils功能实现(commons-io包功能)

public static voidtest3(){

File file= new File("G:/tikatest/test.txt");

String s= null;try{

s=FileUtils.readFileToString(file);

}catch(IOException e) {

e.printStackTrace();

}

System.out.println(s);

}

1.3提取元数据

元数据是什么,是文件所提供的附加信息。如果我们考虑一个音频文件,艺术家名,专辑名,标题下自带的元数据。

public static voidtest4(){

File file=new File("G:/tikatest/test.mp4");

Parser parser= newAutoDetectParser();

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= null;try{

inputstream= newFileInputStream(file);

}catch(FileNotFoundException e) {

e.printStackTrace();

}

ParseContext context= newParseContext();try{

parser.parse(inputstream, handler, metadata, context);

}catch(IOException e) {

e.printStackTrace();

}catch(SAXException e) {

e.printStackTrace();

}catch(TikaException e) {

e.printStackTrace();

}

System.out.println(handler.toString());//getting the list of all meta data elements

String[] metadataNames =metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

Software: OnePlus3-user 7.1.1 NMF26F 76 dev-keys

GPS Altitude Ref: Unknown (2)

Metering Mode: Center weighted average

Model: ONEPLUS A3010

meta:save-date: 2017-09-02T16:32:15

File Name: apache-tika-4154811460990247864.tmp

Exposure Mode: Auto exposure

Exif Version: 2.20

Sensing Method: One-chip color area sensor

tiff:ImageLength: 540

exif:Flash: false

Creation-Date: 2017-09-02T16:32:15

Interoperability Version: 1.00

ISO Speed Ratings: 640

X Resolution: 72 dots per inch

Shutter Speed Value: 1/20 sec

tiff:ImageWidth: 720

Thumbnail Width Pixels: 0

tiff:XResolution: 72.0

Image Width: 720 pixels

Last-Save-Date: 2017-09-02T16:32:15

exif:FNumber: 2.0

Number of Tables: 4 Huffman tables

F-Number: f/2.0

Color Space: sRGB

meta:creation-date: 2017-09-02T16:32:15

Resolution Units: inch

Data Precision: 8 bits

File Modified Date: 星期二 十月 16 22:15:54 +08:00 2018

tiff:BitsPerSample: 8

Last-Modified: 2017-09-02T16:32:15

tiff:YResolution: 72.0

YCbCr Positioning: Center of pixel array

Compression Type: Baseline

Components Configuration: YCbCr

exif:IsoSpeedRatings: 640

X-Parsed-By: org.apache.tika.parser.DefaultParser

Focal Length 35: 28 mm

modified: 2017-09-02T16:32:15

Brightness Value: 0

Thumbnail Offset: 874 bytes

Exif Image Height: 3480 pixels

Focal Length: 4.3 mm

Thumbnail Length: 14211 bytes

White Balance Mode: Auto white balance

Content-Type: image/jpeg

Make: OnePlus

tiff:Make: OnePlus

Date/Time Original: 2017:09:02 08:32:15

Scene Capture Type: Standard

Exif Image Width: 4640 pixels

Makernote: [26 values]

dcterms:created: 2017-09-02T16:32:15

exif:ExposureTime: 0.05

date: 2017-09-02T16:32:15

Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert

Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert

Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert

tiff:ResolutionUnit: Inch

Interoperability Index: Recommended Exif Interoperability Rules (ExifR98)

Flash: Flash did not fire, auto

Date/Time Digitized: 2017:09:02 08:32:15

File Size: 50158 bytes

Thumbnail Height Pixels: 0

Resolution Unit: Inch

Sub-Sec Time Original: 994455

XMP Value Count: 4

tiff:Software: OnePlus3-user 7.1.1 NMF26F 76 dev-keys

Aperture Value: f/2.0

Number of Components: 3

dcterms:modified: 2017-09-02T16:32:15

tiff:Model: ONEPLUS A3010

Image Height: 540 pixels

Sub-Sec Time Digitized: 994455

Sub-Sec Time: 994455

Scene Type: Directly photographed image

Exposure Time: 0.05 sec

exif:DateTimeOriginal: 2017-09-02T16:32:15

exif:FocalLength: 4.26

Compression: JPEG (old-style)

FlashPix Version: 1.00

Date/Time: 2017:09:02 08:32:15

Exposure Program: Unknown (0)

Y Resolution: 72 dots per inch

1.4语言检测

tika可以检测的18种语言:

public static voidtest6(){//Instantiating a file object

File file = new File("G:/tikatest/test.txt");//Parser method parameters

Parser parser = newAutoDetectParser();

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream content= null;try{

content= newFileInputStream(file);

}catch(FileNotFoundException e) {

e.printStackTrace();

}//Parsing the given document

try{

parser.parse(content, handler, metadata,newParseContext());

}catch(IOException e) {

e.printStackTrace();

}catch(SAXException e) {

e.printStackTrace();

}catch(TikaException e) {

e.printStackTrace();

}

LanguageIdentifier object= newLanguageIdentifier(handler.toString());

System.out.println("Language name :" +object.getLanguage());

}

结果:

Language name :lt

1.5提取PDF

强大到可以提取里面的连接以及小标点符号。可以获取PDF的内容与元数据。

public static void test7() throwsIOException, TikaException, SAXException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/4.pdf"));

ParseContext pcontext= newParseContext();//parsing the document using PDF parser

PDFParser pdfparser = newPDFParser();

pdfparser.parse(inputstream, handler, metadata,pcontext);//getting the content of the document

System.out.println("Contents of the PDF :" +handler.toString());//getting metadata of the document

System.out.println("Metadata of the PDF:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ " : " +metadata.get(name));

}

}

结果:

Contents of the PDF :

个人简历...............................

Metadata of the PDF:

access_permission:extract_for_accessibility :truepdf:docinfo:title : 个人简历

meta:save-date : 2018-06-12T07:41:54Z

pdf:docinfo:modified :2018-06-12T07:41:54Z

dcterms:created :2018-06-12T07:41:54Z

Author : liqiang qiao

date :2018-06-12T07:41:54Z

access_permission:can_modify :trueaccess_permission:modify_annotations :truecreator : liqiang qiao

Creation-Date : 2018-06-12T07:41:54Z

title : 个人简历

meta:author : liqiang qiao

access_permission:fill_in_form :truecreated : Tue Jun12 15:41:54 CST 2018pdf:docinfo:producer : Microsoft® Word2013dc:format : application/pdf; version=1.5access_permission:can_print :truepdf:docinfo:created :2018-06-12T07:41:54Z

xmp:CreatorTool : Microsoft® Word2013Last-Save-Date : 2018-06-12T07:41:54Z

dc:title : 个人简历

access_permission:assemble_document :truedcterms:modified :2018-06-12T07:41:54Z

meta:creation-date : 2018-06-12T07:41:54Z

pdf:docinfo:creator : liqiang qiao

dc:creator : liqiang qiao

pdf:PDFVersion :1.5Last-Modified : 2018-06-12T07:41:54Z

modified :2018-06-12T07:41:54Z

xmpTPg:NPages :2access_permission:can_print_degraded :truepdf:encrypted :falseaccess_permission:extract_content :trueproducer : Microsoft® Word2013pdf:docinfo:creator_tool : Microsoft® Word2013Content-Type : application/pdf

1.6提取MSOffice文档(读取word,excel)

从Microsoft Office文档中提取内容和元数据。

public static void test8() throwsTikaException, SAXException, IOException {//detecting the file type

BodyContentHandler handler = newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/test.docx"));

ParseContext pcontext= newParseContext();//OOXml parser

OOXMLParser msofficeparser = newOOXMLParser ();

msofficeparser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

Contents of the document: -Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M

http_load使用教程: https://www.cnblogs.com/shijingjing07/p/6539179.html

1.默认配置;

内存

线程数量:

1.只修改JVM参数

内存

2.并发

2.修改JVM与并发

JVM

并发

Metadata of the document:

cp:revision: 19

meta:last-author: liqiang qiao

Last-Author: liqiang qiao

meta:save-date: 2017-12-14T10:25:00Z

Application-Name: Microsoft Office Word

Author: liqiang qiao

dcterms:created: 2017-12-14T09:28:00Z

Application-Version: 15.0000

Character-Count-With-Spaces: 195

date: 2017-12-14T10:25:00Z

Total-Time: 57

extended-properties:Template: Normal.dotm

meta:line-count: 1

creator: liqiang qiao

publisher:

Word-Count: 29

meta:paragraph-count: 1

Creation-Date: 2017-12-14T09:28:00Z

extended-properties:AppVersion: 15.0000

meta:author: liqiang qiao

Line-Count: 1

extended-properties:Application: Microsoft Office Word

Paragraph-Count: 1

Last-Save-Date: 2017-12-14T10:25:00Z

Revision-Number: 19

dcterms:modified: 2017-12-14T10:25:00Z

meta:creation-date: 2017-12-14T09:28:00Z

Template: Normal.dotm

Page-Count: 1

meta:character-count: 167

dc:creator: liqiang qiao

meta:word-count: 29

Last-Modified: 2017-12-14T10:25:00Z

extended-properties:Company:

modified: 2017-12-14T10:25:00Z

xmpTPg:NPages: 1

extended-properties:TotalTime: 57

dc:publisher:

Character Count: 167

meta:page-count: 1

meta:character-count-with-spaces: 195

Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

补充:tika读取Excel里面的内容

例如一个Excel里面的内容:

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/user.xlsx"));

ParseContext pcontext= newParseContext();

OOXMLParser msofficeparser= newOOXMLParser ();

msofficeparser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

}

结果:

Contents of the document:Sheet1

序号用户名字用户电话用户邮箱用户账户用户类型密码

1rrrrrr15888585954954318308@qq.comroot111管理员111222

200115898569856qiao_liqiang@163.com001普通用户111222

3超级管理员158985698565555@qq.comroot8管理员111222

4qqq15898569856qiao_liqiang@163.com1231普通用户111222

5张三1855845856933335658@qq.com333普通用户111222

6李四15898569856qiao_liqiang@163.com4444普通用户111222

7超级管理员158985698565555@qq.comroot5管理员111222

8张三18434391711qiao_liqiang@163.comroot7管理员111222

9张三18434391711qiao_liqiang@163.comroot3管理员111222

10超管15898569856qiao_liqiang@163.comroot管理员111222

11888815898569856qiao_liqiang@163.com8888普通用户111222

12超级管理员15888585954954318308@qq.comroo6管理员111222

13张三18434391711qiao_liqiang@163.comroot4管理员111222

1.7提取txt文档内容

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/test.txt"));

ParseContext pcontext= newParseContext();

TXTParser msofficeparser= newTXTParser();

msofficeparser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

1.8获取html

获取的是解析后的html,如果需要获取源码可以用IOUtils

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/index.html"));

ParseContext pcontext= newParseContext();

HtmlParser msofficeparser= newHtmlParser();

msofficeparser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

html内容如下:

结果:

Contents of the document:

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.

For online documentation and support please refer to

nginx.org.

Commercial support is available at

nginx.com.

Thank you for using nginx.

Metadata of the document:

title: Welcome to nginx!

Content-Encoding: ISO-8859-1

Content-Type: text/html; charset=ISO-8859-1

dc:title: Welcome to nginx!

补充:FileUtils读取源码

public static void test8() throwsTikaException, SAXException, IOException {

String s= FileUtils.readFileToString(new File("G:/tikatest/index.html"));

System.out.println(s);

}

结果:

Welcome to nginx!

width: 35em;

margin: 0 auto;

font-family: Tahoma, Verdana, Arial, sans-serif;

}

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.

For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.

Thank you for using nginx.

1.9获取Class文件--可以实现反编译的功能。

反编译查看class文件内容:

tika提取class内容:(可以获取类的方法摘要信息)

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/UUIDUtil.class"));

ParseContext pcontext= newParseContext();

ClassParser parser= newClassParser();

parser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

Contents of the document:package cn.xm.jwxt.utils;

public synchronized class UUIDUtil {

public void UUIDUtil();

public static String getUUID();

public static String getUUID2();

}

Metadata of the document:

title: UUIDUtil

resourceName: UUIDUtil.class

dc:title: UUIDUtil

1.10获取Jar文件

可以提取jar内部的class文件的概述信息以及元信息.这个可以用于列出一个文件下的所有的class信息或者写一个工具类查找一个某个class是否在某个jar文件中。

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= new BodyContentHandler(10*1024*1024);

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("G:/tikatest/t.jar"));

ParseContext pcontext= newParseContext();

PackageParser parser= newPackageParser ();

parser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

..........................

org/apache/tika/utils/ServiceLoaderUtils.class

package org.apache.tika.utils;

public synchronized class ServiceLoaderUtils {

public void ServiceLoaderUtils();

public static void sortLoadedClasses(java.util.List);

public static Object newInstance(String);

public static Object newInstance(String, ClassLoader);

}

org/apache/tika/utils/XMLReaderUtils$1.class

package org.apache.tika.utils;

final synchronized class XMLReaderUtils$1 implements org.xml.sax.EntityResolver {

void XMLReaderUtils$1();

public org.xml.sax.InputSource resolveEntity(String, String) throws org.xml.sax.SAXException, java.io.IOException;

}

org/apache/tika/utils/XMLReaderUtils$2.class

package org.apache.tika.utils;

final synchronized class XMLReaderUtils$2 implements javax.xml.stream.XMLResolver {

void XMLReaderUtils$2();

public Object resolveEntity(String, String, String, String) throws javax.xml.stream.XMLStreamException;

}

org/apache/tika/utils/XMLReaderUtils.class

package org.apache.tika.utils;

public synchronized class XMLReaderUtils {

private static final java.util.logging.Logger LOG;

private static final org.xml.sax.EntityResolver IGNORING_SAX_ENTITY_RESOLVER;

private static final javax.xml.stream.XMLResolver IGNORING_STAX_ENTITY_RESOLVER;

public void XMLReaderUtils();

public static org.xml.sax.XMLReader getXMLReader() throws org.apache.tika.exception.TikaException;

public static javax.xml.parsers.SAXParser getSAXParser() throws org.apache.tika.exception.TikaException;

public static javax.xml.parsers.SAXParserFactory getSAXParserFactory();

public static javax.xml.parsers.DocumentBuilderFactory getDocumentBuilderFactory();

public static javax.xml.parsers.DocumentBuilder getDocumentBuilder() throws org.apache.tika.exception.TikaException;

public static javax.xml.stream.XMLInputFactory getXMLInputFactory();

private static void trySetSAXFeature(javax.xml.parsers.DocumentBuilderFactory, String, boolean);

private static void tryToSetStaxProperty(javax.xml.stream.XMLInputFactory, String, boolean);

public static javax.xml.transform.Transformer getTransformer() throws org.apache.tika.exception.TikaException;

static void ();

}

org/apache/tika/utils/package-info.class

package org.apache.tika.utils;

abstract interface package-info {

}

Metadata of the document:

Content-Type: application/zip

补充:在没设置BodyContentHandler参数的时候读取报错如下:

Exception in thread "main" org.apache.tika.sax.WriteOutContentHandler$WriteLimitReachedException: Your document contained more than 100000characters, and so your requested limit has been reached. To receive the full text of the document, increase your limit. (Text up to the limit is however available).

at org.apache.tika.sax.WriteOutContentHandler.characters(WriteOutContentHandler.java:141)

at org.apache.tika.sax.ContentHandlerDecorator.characters(ContentHandlerDecorator.java:146)

at org.apache.tika.sax.xpath.MatchingContentHandler.characters(MatchingContentHandler.java:85)

解决办法就是设置读取的参数:

BodyContentHandler handler = new BodyContentHandler(10*1024*1024);

1.11提取图像信息:

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("g:/tikatest/5.jpeg"));

ParseContext pcontext= newParseContext();

JpegParser JpegParser= newJpegParser();

JpegParser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

Contents of the document:

Metadata of the document:

Number of Tables: 4 Huffman tables

Number of Components: 3

Image Height: 192 pixels

Resolution Units: inch

File Name: apache-tika-7234240523307196989.tmp

Data Precision: 8 bits

File Modified Date: 星期三 十月 17 21:43:39 +08:00 2018

tiff:BitsPerSample: 8

Compression Type: Baseline

Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert

Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert

tiff:ImageLength: 192

Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert

X Resolution: 96 dots

File Size: 9216 bytes

tiff:ImageWidth: 256

Thumbnail Height Pixels: 0

Thumbnail Width Pixels: 0

Image Width: 256 pixels

Y Resolution: 96 dots

1.12提取Mp4信息

public static void test8() throwsTikaException, SAXException, IOException {

BodyContentHandler handler= newBodyContentHandler();

Metadata metadata= newMetadata();

FileInputStream inputstream= new FileInputStream(new File("g:/tikatest/test.mp4"));

ParseContext pcontext= newParseContext();

MP4Parser MP4Parser= newMP4Parser();

MP4Parser.parse(inputstream, handler, metadata,pcontext);

System.out.println("Contents of the document:" +handler.toString());

System.out.println("Metadata of the document:");

String[] metadataNames=metadata.names();for(String name : metadataNames) {

System.out.println(name+ ": " +metadata.get(name));

}

}

结果:

Contents of the document:

Metadata of the document:

dcterms:modified: 2017-07-20T10:25:23Z

xmpDM:duration: 39.5

meta:creation-date: 2017-07-20T10:25:23Z

meta:save-date: 2017-07-20T10:25:23Z

Last-Modified: 2017-07-20T10:25:23Z

dcterms:created: 2017-07-20T10:25:23Z

xmpDM:audioSampleRate: 10000

date: 2017-07-20T10:25:23Z

tiff:ImageLength: 578

modified: 2017-07-20T10:25:23Z

Creation-Date: 2017-07-20T10:25:23Z

tiff:ImageWidth: 442

Content-Type: video/mp4

Last-Save-Date: 2017-07-20T10:25:23Z

补充:有时候读取的文件内容太大的时候需要设置参数,如下:(用于读取大文件)

BodyContentHandler handler = new BodyContentHandler(10*1024*1024);

总结:

至此,apacheTika基本用法已经使用完毕,tika不能获取word,pdf等文件中的图片。但是可以解析文件中的文字,常见文件的内容都是可以提取的。在某些场景下也是有用途的。比如做文件服务器的时候可以将内容提取出来保存到数据库或者保存到文件中,利用solr或者数据库的查询进行模糊搜索。

tika在提取html、office等文件之后是提取里面的文字,有时候提取源码可以用FileUtils,最好两者结合使用。

有时间可以用swing做一个基于apachetika查找文件内容和查找文件class的工具类,类似于everything,做的好一点比everything更好一点可以读取里面的内容。这只是一个思路。。。。。有时间再慢慢实现。

java tika 读取文件_【apache tika】apache tika获取文件内容(与FileUtils的对比)相关推荐

  1. java 删除压缩zip文件_从ZIP存档中删除文件,而无需在Java或Python中解压缩 - java...

    从ZIP存档中删除文件,而无需使用Java(首选)或Python解压缩 你好 我使用包含数百个高度压缩的文本文件的大型ZIP文件.解压缩ZIP文件时,可能要花一些时间,并且很容易消耗多达20 GB的磁 ...

  2. nio 读取目录所有文件_在NIO.2中使用文件和目录

    nio 读取目录所有文件 在先前的文章中,我讨论了文件和目录的创建( 创建文件和目录 )以及选择( 列出和过滤目录内容 ). 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们. 这是 ...

  3. mysql注入如何读取本地文件_如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  4. python多线程读取文件夹下的文件_是否可以使用python多线程从文件夹数读取文件数,并处理这些文件以获得组合结果?...

    我认为学习使用线程的最简单方法是在concurrent.futures模块中使用ThreadPoolExecutor类,因为它比通常的同步for循环多了几行.尤其是在Python3中,但这可以适用于P ...

  5. c fscanf 按行读取文件_每日干货丨C语言文件操作函数

    文件操作指针 FILE *fp fp变量具有指向文件内存的功能,即可以直接操作文件 注:访问文件不只可以用指针 还可以用文件流指针和文件操作符 1.1 fopen函数 对一个文件操作时一定需要先打开文 ...

  6. java频繁的读写文件_大量较为频繁读写的文件一般如何进行存储?

    文件内容当然不能存在关系型数据库里.但是你可以把文件的元数据比如原始的文件名,创建者,描述,关键字等,以及文件实际存储信息存在数据库,方便查询. 如果数据量不是很大(G级别以下),文件不是特别零碎,可 ...

  7. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?

    问题:JavaWeb中实现文件上传的方式有哪些? 上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式 Servlet2.5 方式 Servlet ...

  8. 用cmd运行python文件_怎么用cmd运行python文件

    Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的. 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project.如果我们进 ...

  9. 前端将二进制数据流转为文件_前端通过二进制流下载文件

    JS下载文件两种方式总结: 下载文件主要分为两种形式,具体使用哪种方式取决于后台: 1.如果后台服务器的静态目录有可供下载的静态资源,后台接口返回文件路径,直接window.location.href ...

最新文章

  1. android Butter Knife 使用详解
  2. 无法访问xxx指向的web服务器,请检查网络设置
  3. sgrdb mysql_GreatDB数据库在HA架构的单调度集群模式下如何手动后台启停?
  4. 趁爸妈不在家约男朋友回家吃饭,然而......
  5. wordpress的下载和安装介绍
  6. 大号字代码php,如何用QQ发超大汉字_php
  7. python库测试记录(sys、time、datetime、random、hashlib)
  8. 在Linux中怎么把用户添加到组中
  9. 支付宝借呗频繁借还款对征信有影响吗?
  10. 一步一步使用阿里云容器服务部署基于.NET的JEXUS网站 (转)
  11. python3编译器不同版本差别大吗_python3.9的转义符使用和其他版本不一样吗?
  12. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.3节一个团队,一种语言...
  13. html小作业--新闻栏目
  14. Mac 配置maven
  15. cad编辑节点快捷键是什么_cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?......
  16. aect17定义_【多选题】AECT关于教育技术的17定义认为,教育技术的目的是()? A. 提高绩效的 B. 促进知识理解 C. 调整改善学习及表现 D. 促进学习...
  17. 利率里面的BP是什么意思,bp是什么意思贷款利率
  18. 【Applied Algebra】可满足性模理论(Satisfiability Modulo Theories)入门
  19. 杨然茹(帮别人名字作诗)
  20. Java语言最新实用案例教程_Java语言最新实用案例教程

热门文章

  1. 【题目49:装快递(C++) ; ps:输入一行数据(带逗号或空格)更好的输入方式】
  2. valet It works!
  3. 【C语言】链表的一般设计步骤
  4. 一键淘宝应用模板,轻松打包店铺网址,一键生成APP
  5. Linux搭建LAMP平台与DISCUZ论坛
  6. excel如何如何批量查询银行开户行?
  7. mPEG DTPA,甲氧基聚乙二醇-二乙烯三胺五醋酸,应用于科研实验
  8. Nature Comm | 昆士兰大学水中心-细菌介导的新型丙烷厌氧氧化耦合硝酸盐还原过程...
  9. JavaWeb之简单的学生信息管理系统(二)
  10. 吃透这份Java高级工程师面试497题解析,帮你突破瓶颈