4

次のコードを実装しようとしたとき

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)

その問題で私を助けてくれませんか?

4

2 に答える 2

11

ほとんどの場合、クラスパスに POI のコピーが 2 つあります。1 つは、使用する機能を含む新しい最新バージョンです。もう1つは古いバージョンであり、システムは古いバージョンを優先しているようです...

これはよくある問題であり、POI FAQ がまさにこのケースをカバーしています。理想的には、クラスパスを見て、余分な古い POI jar を特定してみてください。ただし、それが機能しない場合は、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 のファイル名が出力されるので、古いコピーがどこから来ているのかを突き止めて削除することができます!

于 2012-07-11T09:43:28.943 に答える