java使用poi3.16版本中的WordExtractord读取fileinputstream 出现的问题
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.toByteArray(Ljava/io/InputStream;I)[B
at org.apache.poi.hwpf.HWPFDocumentCore.verifyAndBuildPOIFS(HWPFDocumentCore.java:96)
at org.apache.poi.hwpf.extractor.WordExtractor.<init>(WordExtractor.java:51)
at com.primeton.knowledge.word.wordEx.appWord(wordEx.java:58)
at com.primeton.knowledge.word.wordEx.main(wordEx.java:40)
希望采纳
根据异常信息,WordExtractor在初始化时调用了org.apache.poi.util.IOUtils.toByteArray(Ljava/io/InputStream;I)[B方法,但是你使用的POI 3.16版本并不包含这个方法。
解决办法是:
public byte[] toByteArray(InputStream in, int bufLen) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[bufLen];
int len;
while ((len = in.read(buffer)) > -1) {
out.write(buffer, 0, len);
}
return out.toByteArray();
}
然后在调用WordExtractor之前,执行:
IOUtils.toByteArray = IOUtilsExtension.toByteArray;
将自定义的toByteArray方法替换POI内部的方法。
byte[] data = IOUtils.toByteArray(in);
WordExtractor extractor = new WordExtractor(data);
这种方式就不会直接调用POI内的toByteArray方法,可以避免此错误。
所以,修复这个NoSuchMethodError异常的思路是: