在Java开发中,解析Word文档是一项常见需求,无论是读取文档内容、提取数据还是修改文档结构,都需要借助合适的工具库,本文将详细介绍几种主流的Java解析Word文档的方法,包括其适用场景、核心代码示例及注意事项。

使用Apache POI解析Word文档
Apache POI是Java领域最常用的Office文档处理库,支持对Word(.doc和.docx)文件的读写操作,其核心类包括HWPF(处理.doc格式)和XWPF(处理.docx格式)。
解析.docx格式
对于较新的.docx格式,可通过XWPFDocument类加载文档,并遍历段落、表格、图片等元素。
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import java.io.FileInputStream;
public class DocxParser {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("example.docx");
XWPFDocument document = new XWPFDocument(fis);
// 遍历段落
for (XWPFParagraph paragraph : document.getParagraphs()) {
System.out.println(paragraph.getText());
}
// 遍历表格
document.getTables().forEach(table -> {
table.getRows().forEach(row -> {
row.getTableCells().forEach(cell -> {
System.out.print(cell.getText() + "\t");
});
System.out.println();
});
});
fis.close();
document.close();
}
}
解析.doc格式
对于旧版.doc格式,需使用HWPFDocument类,但其功能相对有限,且对复杂样式的支持较弱。
使用docx4j处理.docx文档
docx4j是另一个专注于Office Open XML(如.docx)的库,功能更强大,尤其在处理复杂文档结构(如页眉页脚、超链接、样式)时表现更优。

核心代码示例
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
public class Docx4jParser {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("example.docx"));
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
// 获取文档纯文本内容
String text = documentPart.getText();
System.out.println(text);
// 提取特定段落(如带有标题样式的段落)
documentPart.getContent().forEach(node -> {
if (node instanceof org.docx4j.wml.P) {
org.docx4j.wml.P p = (org.docx4j.wml.P) node;
// 可通过p.getPPr()获取段落样式,进一步筛选
}
});
}
}
使用Jacob(Windows专用)
Jacob(Java-COM Bridge)通过调用Windows COM组件(如Microsoft Word)解析文档,适合需要依赖Word原生功能的场景(如复杂版式渲染),但仅支持Windows系统,且需安装Word。
核心代码示例
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
public class JacobParser {
public static void main(String[] args) {
ActiveXComponent word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(false));
Dispatch documents = word.getProperty("Documents").toDispatch();
Dispatch document = Dispatch.call(documents, "Open", "example.docx").toDispatch();
Dispatch content = Dispatch.get(document, "Content").toDispatch();
String text = Dispatch.get(content, "Text").toString();
System.out.println(text);
Dispatch.call(document, "Close", new Variant(false));
word.invoke("Quit", new Variant[]{});
}
}
选择建议与注意事项
-
格式选择:
- 优先使用Apache POI或docx4j处理.docx格式,二者均为纯Java实现,跨平台性好。
- 若必须处理.doc格式,仅建议使用Apache POI的
HWPF,但需注意功能限制。
-
功能需求:
- 简单文本提取:Apache POI足够轻量;
- 复杂样式处理(如页眉页脚、图表):docx4j更专业;
- 依赖Word原生功能:Jacob可选,但需Windows环境。
-
性能与依赖:

- Apache POI和docx4j需引入相关依赖(如poi-ooxml、docx4j-core),注意版本兼容性;
- Jacob需额外配置jacob.dll,且多线程支持较差。
-
异常处理:
- 文件操作需捕获
IOException,COM操作需处理ComFailException,确保资源释放(如关闭文档、退出Word进程)。
- 文件操作需捕获
通过以上方法,可根据实际需求选择合适的工具高效解析Word文档,实现数据提取与处理功能。

















