2012-07-11 100 views
3

當我試圖實現以下如何使用POI爲DOC文件時要解決的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) 

你能幫我解決這個問題嗎?

+0

你可以嘗試移動你的文件在一個目錄中,看看它是否工作...更改您的代碼爲 File someFile = new File(「D:\\ somedir \\ arz.doc」); – jsshah 2012-07-11 00:26:53

+0

你也確定...所有依賴的罐子在加載代碼時都在你的類路徑中... – jsshah 2012-07-11 00:27:23

回答

6

你幾乎可以肯定在你的類路徑上有兩個POI副本。一個是包含你想使用的功能的新的最新版本。另一種是舊版本,沒有,看起來你的系統更喜歡舊版本...

這是一個常見的問題,即POI FAQ Covers this very case。理想情況下,只需查看您的類路徑,並嘗試識別額外的舊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文件的文件名,這樣你就可以在哪裏工作的舊副本來自並刪除它!

相關問題