桂林网站优化价格,wordpress主题改中文版,网站建设公司发展历程,温州网站网站建设目录结构 前言tika简介Tika支持的文件格式MAVEN依赖JAVA程序JAVA测试程序测试文件测试结果部分文件提取失败参考连接 前言 Apache Tika提取文件整理如下#xff0c;如有特定的文件需要提取可以先参照【部分文件提取失败】章节对照#xff0c;以免浪费您的宝贵时间#xff0c… 目录结构 前言tika简介Tika支持的文件格式MAVEN依赖JAVA程序JAVA测试程序测试文件测试结果部分文件提取失败参考连接 前言 Apache Tika提取文件整理如下如有特定的文件需要提取可以先参照【部分文件提取失败】章节对照以免浪费您的宝贵时间如有问题或者解决办法还望大牛不吝赐教小编在此谢过
tika简介 Tika全名Apache Tika是用于文件类型检测和从各种格式的文件中提取内容的一个库。 Tika使用现有的各种文件解析器和文档类型的检测技术来检测和提取数据。 使用Tika可以轻松提取到的不同类型的文件内容如电子表格文本文件图像PDF文件甚至多媒体输入格式在一定程度上提取结构化文本以及元数据。 统一解析器接口Tika封装在一个单一的解析器接口的第三方解析器库。由于这个特征用户逸出从选择合适的解析器库的负担并使用它根据所遇到的文件类型。 使用的Tika facade类是从Java调用Tika的最简单和直接的方式而且也沿用了外观的设计模式。可以在 Tika API的org.apache.tika包Tika 找到外观facade类。 Tika提供用于解析不同文件格式的一个通用API。它采用83个现有的专业解析器库所有这些解析器库是根据一个叫做Parser接口单一接口封装。 Tika支持的文件格式
文件格式类库Tika中的类XMLorg.apache.tika.parser.xmlXMLParserHTMLorg.apache.tika.parser.htmll and it uses Tagsoup LibraryHtmlParserMS-Office compound document Ole2 till 2007 ooxml 2007 onwardsorg.apache.tika.parser.microsoftorg.apache.tika.parser.microsoft.ooxml and it uses Apache Poi libraryOfficeParser(ole2)OOXMLParser(ooxml)OpenDocument Format openofficeorg.apache.tika.parser.odfOpenOfficeParserportable Document Format(PDF)org.apache.tika.parser.pdf and this package uses Apache PdfBox libraryPDFParserElectronic Publication Format (digital books)org.apache.tika.parser.epubEpubParserRich Text formatorg.apache.tika.parser.rtfRTFParserCompression and packaging formatsorg.apache.tika.parser.pkg and this package uses Common compress libraryPackageParser and CompressorParser and its sub-classesText formatorg.apache.tika.parser.txtTXTParserFeed and syndication formatsorg.apache.tika.parser.feedFeedParserAudio formatsorg.apache.tika.parser.audio and org.apache.tika.parser.mp3AudioParser MidiParser Mp3- for mp3parserImageparsersorg.apache.tika.parser.jpegJpegParser-for jpeg imagesVideoformatsorg.apache.tika.parser.mp4 and org.apache.tika.parser.video this parser internally uses Simple Algorithm to parse flash video formatsMp4parser FlvParserjava class files and jar filesorg.apache.tika.parser.asmClassParser CompressorParserMobxformat (email messages)org.apache.tika.parser.mboxMobXParserCad formatsorg.apache.tika.parser.dwgDWGParserFontFormatsorg.apache.tika.parser.fontTrueTypeParserexecutable programs and librariesorg.apache.tika.parser.executableExecutableParser
MAVEN依赖
目前已经有2.8.0版本有兴趣的朋友可以尝试一下使用感受可以和小编交流一下哦~
repositoriesrepositoryidcom.e-iceblue/idnamee-iceblue/nameurlhttp://repo.e-iceblue.com/nexus/content/groups/public//url/repository
/repositoriesdependenciesdependencygroupIdorg.apache.tika/groupIdartifactIdtika-parsers/artifactIdversion1.24/version/dependencydependencygroupIdorg.apache.tika/groupIdartifactIdtika-core/artifactIdversion1.24/version/dependency
/dependenciesJAVA程序
package com.xxx.xxx.carry;import cn.hutool.core.lang.UUID;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import org.apache.commons.io.FilenameUtils;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.extractor.EmbeddedDocumentExtractor;
import org.apache.tika.extractor.ParsingEmbeddedDocumentExtractor;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MediaType;
import org.apache.tika.mime.MimeTypeException;
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 org.xml.sax.SAXException;import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;public class CarryingFileUtils {// 创建解析器,使用AutoDetectParser可以自动检测一个最合适的解析器private static Parser parser new AutoDetectParser();private static Detector detector ((AutoDetectParser) parser).getDetector();private static TikaConfig config TikaConfig.getDefaultConfig();public static void extract(InputStream is, Path outputDir) throws SAXException, TikaException, IOException {Metadata m new Metadata();// 指定最基本的变量信息(即存放一个所使用的解析器对象ParseContext c new ParseContext();BodyContentHandler h new BodyContentHandler(-1);c.set(Parser.class, parser);EmbeddedDocumentExtractor ex new MyEmbeddedDocumentExtractor(outputDir, c);c.set(EmbeddedDocumentExtractor.class, ex);// InputStream-----指定文件输入流// ContentHandler--指定要解析文件的哪一个内容,它有一个实现类叫做BodyContentHandler,即专门用来解析文档内容的// Metadata--------指定解析文件时,存放解析出来的元数据的Metadata对象// ParseContext----该对象用于存放一些变量信息,该对象最少也要存放所使用的解析器对象,这也是其存放的最基本的变量信息parser.parse(is, h, m, c);}private static class MyEmbeddedDocumentExtractor extends ParsingEmbeddedDocumentExtractor {private final Path outputDir;private int fileCount 0;private MyEmbeddedDocumentExtractor(Path outputDir, ParseContext context) {super(context);this.outputDir outputDir;}Overridepublic boolean shouldParseEmbedded(Metadata metadata) {return true;}Overridepublic void parseEmbedded(InputStream stream, ContentHandler handler, Metadata metadata, boolean outputHtml) throws IOException {//try to get the name of the embedded file from the metadataString name metadata.get(Metadata.RESOURCE_NAME_KEY);if (name null) {name file_ fileCount;} else {//make sure to select only the file name (not any directory paths//that might be included in the name) and make sure//to normalize the namename name.replaceAll(\u0000, );int prefix FilenameUtils.getPrefixLength(name);if (prefix -1) {name name.substring(prefix);}name FilenameUtils.normalize(FilenameUtils.getName(name));}//now try to figure out the right extension for the embedded fileMediaType contentType detector.detect(stream, metadata);if (name.indexOf(.) -1 contentType ! null) {try {name config.getMimeRepository().forName(contentType.toString()).getExtension();} catch (MimeTypeException e) {e.printStackTrace();}}// 夹带文件名编码格式调整name new String(name.getBytes(ISO-8859-1), GBK);Path outputFile outputDir.resolve(name);if (Files.exists(outputFile)) {outputFile outputDir.resolve(UUID.randomUUID().toString() - name);}Files.createDirectories(outputFile.getParent());String formart name.substring(name.lastIndexOf(.) 1).toUpperCase();// 去除无关文件if (!EMF,WMF.contains(formart)) {Files.copy(stream, outputFile);}}}
}JAVA测试程序
package com.xxx.xxx.utils;import com.xxx.xxx.carry.CarryingFileUtils;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;public class Jkx {public static void main(String[] args) {// 提取文件String inputFilrPath C:\\Users\\Administrator\\Desktop\\file_check\\qiantao\\Excel文件嵌套doc.xlsx;// 输出文件路径String outFilePath C:\\Users\\Administrator\\Desktop\\file_check\\nest_file\\;try {InputStream inputStream new BufferedInputStream(new FileInputStream(inputFilrPath));Path outFileUrl Paths.get(outFilePath);CarryingFileUtils.extract(inputStream, outFileUrl);} catch (Exception e) {e.printStackTrace();}}
}测试文件
测试文件_百度网盘提取链接
测试结果 部分文件提取失败
提取失败文件整理如下如有大牛有解决办法还望不吝赐教
文件类型嵌套文件类型.dot.doc.doc.docm.doc.wps.wps.wps.xls.xls.et.et.xls.et.xltm.ett.pps.ppt.html.wps.mht.wps.mhtml.wps.pot.pot.cebx.*.dot.doc.dps.dps.pptx.dps.dpt.dps.docx.eid.doc.eis.png.odp.png.ods.png.odt
参考连接
https://www.jianshu.com/p/407735f03094?v1672195773961