如何使用POI为DOC文件时要解决的NoSuchMethodError(How to solve a

2019-09-19 07:23发布

当我试图执行以下的任何代码

File someFile = new File("D:\\arz.doc");
InputStream inputStrm = new FileInputStream(someFile);
HWPFDocument wordDoc = new HWPFDocument(inputStrm);
System.out.println(wordDoc.getText());

要么:

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("D:\\arz.doc"));
WordExtractor extractor = new WordExtractor(fs);
String wordText = extractor.getText();

,该错误信息永远是如下:

Exception in thread “main” java.lang.NoSuchMethodError:            
org.apache.poi.poifs.filesystem.POIFSFileSystem.getRoot()Lorg/apache/poi/poifs/filesystem/DirectoryNode;
at org.apache.poi.hwpf.HWPFDocument.(HWPFDocument.java:186)
at DB_connect.dissertation_araalz.ParseWodDocFile.main(ParseWodDocFile.java:29)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

你能帮我这个问题?

Answer 1:

你几乎肯定对你的classpath POI的两个副本。 一个是包含要使用该功能的新的,最新的版本。 另一种是较旧的版本,不支持,似乎你的系统更喜欢旧的一个...

这是一个常见的问题足够的POI FAQ涵盖了这种非常情况下 。 理想的情况下,就看你的类路径,并尝试找出多余的旧的POI罐子。 但是,如果不行,请尝试从POI FAQ这个代码片段:

ClassLoader classloader =
   org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
         "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);

这将打印出您使用的POI的jar文件的文件名,这样你就可以制定出在旧副本是来自并将其删除!



Answer 2:

作为@Gagravarr指出,尝试改变所有的POI库的版本,以一个共同的版本。 我固定它以同样的方式。



文章来源: How to solve a NoSuchMethodError when using POI for doc files