2014-01-08 49 views
2

我使用的Apache POI实用程序(POI暂存器-3.9.jar和相关的3.9版本POI罐子)转换成DOC文件txt.it为TXT工作与大多数的文件,但我得到一个异常就像如下获取java.lang.IndexOutOfBoundsException转换DOC文件时,使用Apache POI

java.lang.IndexOutOfBoundsException: 0 not accessible in a list of length 0 
at org.apache.poi.util.IntList.get(IntList.java:346) 
at org.apache.poi.poifs.storage.BlockAllocationTableReader.fetchBlocks(BlockAllocationTableReader.java:224) 
at org.apache.poi.poifs.storage.BlockListImpl.fetchBlocks(BlockListImpl.java:123) 
at org.apache.poi.poifs.storage.SmallDocumentBlockList.fetchBlocks(SmallDocumentBlockList.java:30) 
at org.apache.poi.poifs.filesystem.POIFSFileSystem.processProperties(POIFSFileSystem.java:521) 
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:163) 
at org.apache.poi.hwpf.HWPFDocumentCore.verifyAndBuildPOIFS(HWPFDocumentCore.java:106) 
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:174) 

守则是继

fileInputStream = new FileInputStream(file.getAbsolutePath()); 

// A HWPFDocument used to read document file from FileInputStream 
HWPFDocument doc = new HWPFDocument(fileInputStream); 

// A WordExtractor used to read textual content from document 
WordExtractor docExtractor = new WordExtractor(doc); 

// This Array stores each line from the document file. 
String[] docArray = docExtractor.getParagraphText(); 
StringBuilder contents = new StringBuilder(); 
for (int i = 0; i < docArray.length; i++) { 
    if (docArray[i] != null) { 
     contents.append(docArray[i]); 
     contents.append(System.getProperty("line.separator")); 
    } 
} 
isConverted = FileDirectoryOperations.writeTextOutputFile(targetFilePath, contents.toString()); 

我们正在线越来越例外HWPFDocument doc = new HWPFDocument(fileInputStream);

做我们对此有任何修正。

请分享您的意见。

在此先感谢。

Sourabh

+0

您可以发布您的代码? – Bhushan

回答

0

你得到的例外表明有什么东西了底层OLE2容器的结构方式。

当涉及到OLE2结构时,较旧的POIFSFileSystem比较新的(但只读的)NPOIFSFileSystem更挑剔一点,所以你应该尝试切换到那个。然后,您的设置代码将是:

NPOIFSFileSystem fs = new NPOIFSFileSystem(file); 
HWPFDocument doc = new HWPFDocument(fs.getRoot()); 
WordExtractor docExtractor = new WordExtractor(doc); 

作为奖励,NPOIFSFileSystem也稍快和更低的内存

+0

是的,这是现在的工作...我们可以使用NPOIFSFileSystem为XWPFDocument(对于docx)。 – user3172677

+0

不,NPOIFS/POISF仅适用于像.doc这样以前的基于OLE2的文档。对于像.docx这样的OOXML文档,您需要根据所有文档 – Gagravarr

+0

使用OPCPackage,感谢您的帮助.... – user3172677

相关问题