如何在为doc文件使用POI时解决NoSuchMethodError

当我试图实现以下任何代码时

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) 

你能帮我解决这个问题吗?

您几乎肯定在类路径上有两个POI副本。 一个是新的最新版本,其中包含您要使用的function。 另一个是没有的旧版本,似乎你的系统更喜欢旧的…

这是一个常见的问题, POI FAQ涵盖了这种情况 。 理想情况下,只需查看您的类路径,并尝试识别额外的旧POI jar。 但是,如果这不起作用,请尝试POI常见问题解答中的以下代码段:

 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的文件名,因此您可以找出旧版本的来源并删除它!