错误显示doc文件读取从文档上的控制台中的Java
问题描述:
我试图从控制台上一个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();
}
}
答
该文件是一个真正的RTF文件
这是从IllegalArgumentException
的典型的消息构造函数为HWPFDocument
。这意味着提供的文件实际上是(写字板)RTF文件,其.rtf
扩展名已被错误地重命名为.doc
。
供应真正的MS Word .doc
文件,而不是和修复你的代码不继续流时发生异常。你需要扔掉它。
答
这意味着,在DocReader.java文件的第36行,你正试图从调用对象的API,但该对象没有被尚未创建。因此,解决方案是在进行API调用之前首先创建类的实例。
UPDATE
我的直觉告诉我,NullPointerException
发生在docExtractor.getParagraphText()
因为docExtractor
没有得到正确初始化。相反,吞咽异常,打印堆栈跟踪找出实际的问题,比如: -
try {
...
}
catch(Exception exep) {
exep.printStackTrace(); // do this
}
答
只需在Microsoft Office等某些Document程序中打开该文件即可。现在使用“另存为”选项保存相同的文件并选择.doc格式。
这将有助于查看DocReader.java第36行附近的代码,以帮助您诊断出错的地方。您正在使用尚未实例化或分配的对象。 – jmq 2011-02-14 20:43:22