Java InputStreamReader错误(org.apache.poi.openxml4j.exceptions.InvalidOperationException)

时间:2016-03-18 11:38:47

标签: java apache-poi inputstream text-extraction bufferedstream

我正在尝试使用Apache POI Framework(Java)将pptx文件转换为txt(文本提取)。 我是编码Java的新手,所以我对Buffered Readers / InputStream等了解不多。

我尝试的是:

import org.apache.poi.xslf.XSLFSlideShow;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xslf.usermodel.XMLSlideShow;    

... Classes and Stuff ....

String inputfile = "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx";
InputStream fis = new FileInputStream(inputfile);
BufferedReader br1 = new BufferedReader(new InputStreamReader(fis));
String fileName = br1.readLine();

System.out.println(new XSLFPowerPointExtractor(new XMLSlideShow(new XSLFSlideShow(fileName))).getText());
br1.close();

我的目标是,将提取的文本写入变量,但它甚至不能在控制台上打印它...我得到的是:

org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'PK
org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:102)
org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:199) 
org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:178) 
org.apache.poi.POIXMLDocument.openPackage(POIXMLDocument.java:69) 
org.apache.poi.xslf.XSLFSlideShow.<init>(XSLFSlideShow.java:90) 

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

你做的很多,事实上你正试图将PPTX本身的数据作为文件名读取,更好的是使用

System.out.println(new XSLFPowerPointExtractor(
    new XMLSlideShow(new XSLFSlideShow(
    "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx"))).getText());

或更通用的

POITextExtractor extractor = ExtractorFactory.createExtractor(
    new java.io.File("X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx"");
System.out.println(extractor.getText());
extractor.close();

答案 1 :(得分:0)

我不能给你正确答案(因为我自己不使用POI),但我可以告诉你你的错误可能在哪里。 XSLFSlideShow类的构造函数期望文件路径作为其参数。但是你传递了一个InputStream。尝试如下:

String filePath = "X:\\Master\\simpl_temp\\2d0a44a2-95e7-428c-911c-1f803acbff42.pptx";
System.out.println(new XSLFPowerPointExtractor(new XMLSlideShow(new XSLFSlideShow(filePath))).getText());