2011-02-14 92 views
2

我試圖從控制檯上一個doc文件顯示數據,然後我得到這個錯誤錯誤顯示doc文件讀取從文檔上的控制檯中的Java

run: 
The document is really a RTF file 
Exception in thread "main" java.lang.NullPointerException 
    at DocReader.readDocFile(DocReader.java:36) 
    at DocReader.main(DocReader.java:47) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 4 seconds) 

任何一個可以解釋我哪裏錯了

代碼是 import java.io.File; import java.io.FileInputStream;

import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 
public class DocReader { 
public void readDocFile() { 
File docFile = null; 
WordExtractor docExtractor = null ; 
WordExtractor exprExtractor = null ; 
try { 
docFile = new File("C:\\web.doc"); 

FileInputStream fis=new FileInputStream(docFile.getAbsolutePath()); 


HWPFDocument doc=new HWPFDocument(fis); 

docExtractor = new WordExtractor(doc); 
} 
catch(Exception exep) 
{ 
System.out.println(exep.getMessage()); 
} 


String [] docArray = docExtractor.getParagraphText(); 

for(int i=0;i<docArray.length;i++) 
{ 
if(docArray[i] != null) 
System.out.println("Line "+ i +" : " + docArray[i]); 
} 
} 

public static void main(String[] args) { 
DocReader reader = new DocReader(); 
reader.readDocFile(); 
} 
} 
+0

這將有助於查看DocReader.java第36行附近的代碼,以幫助您診斷出錯的地方。您正在使用尚未實例化或分配的對象。 – jmq 2011-02-14 20:43:22

回答

3

該文件是一個真正的RTF文件

這是從IllegalArgumentException的典型的消息構造函數爲HWPFDocument。這意味着提供的文件實際上是(寫字板)RTF文件,其.rtf擴展名已被錯誤地重命名爲.doc

供應真正的MS Word .doc文件,而不是和修復你的代碼繼續流時發生異常。你需要扔掉它。

0

這意味着,在DocReader.java文件的第36行,你正試圖從調用對象的API,但該對象沒有被尚未創建。因此,解決方案是在進行API調用之前首先創建類的實例。

UPDATE

我的直覺告訴我,NullPointerException發生在docExtractor.getParagraphText()因爲docExtractor沒有得到正確初始化。相反,吞嚥異常,打印堆棧跟蹤找出實際的問題,比如: -

try { 
    ... 
} 
catch(Exception exep) { 
    exep.printStackTrace(); // do this 
} 
+0

我可以發佈代碼我做了什麼,所以你可以告訴我我錯了什麼地方 – satheesh 2011-02-14 20:44:17

+0

當然,在這裏發佈你的代碼。 – limc 2011-02-14 20:45:36

1

只需在Microsoft Office等某些Document程序中打開該文件即可。現在使用「另存爲」選項保存相同的文件並選擇.doc格式。

相關問題