Java如何解析Word文档?

Java解析Word文档常用Apache POI库,支持读取.doc和.docx格式,提取文本、表格、图片等内容,也可用Tika或docx4j进行文本抽取或高级操作,实现结构化数据处理。

在Java中解析Word文档,开发者常用Apache POI、Apache Tika等成熟库实现,以下为详细方法及代码示例:

Java如何解析Word文档?


主流方法及代码实现

Apache POI(推荐)

  • 适用格式:.doc (HWPF) 和 .docx (XWPF)

  • Maven依赖:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version> <!-- .doc支持 -->
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version> <!-- .docx支持 -->
    </dependency>
  • 解析.docx文件:

    import org.apache.poi.xwpf.usermodel.*;
    import java.io.FileInputStream;
    public class DocxParser {
        public static void main(String[] args) throws Exception {
            try (FileInputStream fis = new FileInputStream("document.docx");
                 XWPFDocument doc = new XWPFDocument(fis)) {
                // 1. 提取文本
                StringBuilder text = new StringBuilder();
                for (XWPFParagraph p : doc.getParagraphs()) {
                    text.append(p.getText()).append("n");
                }
                System.out.println("文本内容: " + text);
                // 2. 提取表格
                for (XWPFTable table : doc.getTables()) {
                    for (XWPFTableRow row : table.getRows()) {
                        for (XWPFTableCell cell : row.getTableCells()) {
                            System.out.print(cell.getText() + "t");
                        }
                        System.out.println();
                    }
                }
                // 3. 提取图片(需保存到本地)
                for (XWPFPictureData pic : doc.getAllPictures()) {
                    byte[] data = pic.getData();
                    String fileName = pic.getFileName();
                    // 保存图片到文件系统...
                }
            }
        }
    }
  • 解析.doc文件(旧格式):

    Java如何解析Word文档?

    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.extractor.WordExtractor;
    public class DocParser {
        public static void main(String[] args) throws Exception {
            try (FileInputStream fis = new FileInputStream("document.doc");
                 HWPFDocument doc = new HWPFDocument(fis)) {
                WordExtractor extractor = new WordExtractor(doc);
                String text = extractor.getText(); // 获取全文
                System.out.println(text);
            }
        }
    }

Apache Tika(自动识别格式)

  • 优势:自动检测文件类型,支持Word/PDF/Excel等

  • Maven依赖:

    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>2.7.0</version>
    </dependency>
  • 代码示例:

    import org.apache.tika.Tika;
    import org.apache.tika.metadata.Metadata;
    import java.io.FileInputStream;
    public class TikaParser {
        public static void main(String[] args) throws Exception {
            Tika tika = new Tika();
            try (FileInputStream fis = new FileInputStream("document.docx")) {
                Metadata metadata = new Metadata();
                String content = tika.parseToString(fis, metadata);
                System.out.println("内容: " + content);
                System.out.println("类型: " + metadata.get(Metadata.CONTENT_TYPE));
            }
        }
    }

关键注意事项

  1. 格式兼容性:

    Java如何解析Word文档?

    • .docx(POI的XWPFDocument)解析更稳定,.doc(HWPFDocument)已停止更新。
    • 复杂格式(如公式、艺术字)可能解析失败,需测试验证。
  2. 性能优化:

    • 大文件处理:使用POI SAX模式(如XSSFEventBasedExcelExtractor)避免内存溢出。
    • 关闭资源:用try-with-resources确保流和文档对象关闭。
      提取限制**:
    • POI可获取文本、表格、图片,但无法保留原始样式(如字体颜色)。
    • 需处理加密文档:通过POI的EncryptedDocumentException捕获异常。

常见问题解决方案

  • 乱码问题:指定编码(如TextExtractor.setEncoding("UTF-8"))。
  • 依赖冲突:检查Maven的依赖树(mvn dependency:tree),排除重复库。
  • 云文档解析:先通过API(如Microsoft Graph)下载为本地文件再解析。

替代方案

  • docx4j:专精.docx,支持图表/批注等高级特性(但学习曲线陡峭)。
  • OpenPDF:专注PDF,若需Word转PDF后解析可使用。
  • 商业库:Aspose.Words(付费,功能全面,支持渲染为HTML/PDF)。

引用说明

通过上述方法,开发者可高效解析Word内容至Java应用,推荐优先使用Apache POI处理结构化数据,或Apache Tika实现快速全文提取,实际部署前建议进行多格式兼容性测试。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/40168.html

赞 (0)
酷盾叔的头像酷盾叔
上一篇 2025年6月27日 16:26
下一篇 2025年6月27日 16:32

相关推荐

  • Java中返回数组的方法有哪些,如何高效实现?

    在Java中,返回数组可以通过多种方式实现,以下是一些常见的写法以及详细的解释,使用基本类型数组在Java中,你可以使用基本数据类型(如int、double等)的数组来返回值,下面是一个使用int类型数组的例子:public static int[] createArray() { int[] array……

    2025年9月26日
    2300
  • Java读写XML文件内容有哪些具体方法和技巧?

    Java中读写XML文件内容通常涉及到DOM(文档对象模型)和SAX(简单API for XML)两种方式,以下是使用这两种方式读写XML文件的基本步骤和示例代码,使用DOM解析和读写XML文件DOM解析是一种基于树形结构的解析方式,它将整个XML文档加载到内存中,形成一个树形结构,便于遍历和修改,读取XML文……

    2025年10月23日
    2800
  • Java调用阿里大鱼短信接口的具体步骤是什么?

    Java调用阿里大鱼短信接口的详细步骤如下:阿里大鱼短信接口概述阿里大鱼短信服务是阿里云提供的一种短信发送服务,可以通过API接口发送验证码、通知、营销短信等,以下是使用Java调用阿里大鱼短信接口的详细步骤,准备工作注册阿里云账号:如果没有阿里云账号,请先注册一个,开通阿里大鱼短信服务:在阿里云控制台中开通短……

    2025年9月14日
    3600
  • Java中如何正确实现一个新类对另一个类的继承?

    在Java编程语言中,新建类继承其他类是面向对象编程(OOP)的一个重要概念,通过继承,子类可以继承父类的方法和属性,从而实现代码的复用和扩展,以下是如何在Java中新建类并使其继承其他类的详细步骤:定义父类需要定义一个父类,父类包含了将要被继承的方法和属性,public class ParentClass……

    2025年9月20日
    2300
  • Java反射中如何成功调用一个类的私有方法?

    Java反射是一种强大的机制,允许我们在运行时动态地获取和操作类的信息,其中一个应用场景就是获取并调用私有方法,私有方法属于类的内部实现,通常不对外公开,但通过反射,我们可以绕过访问控制,获取并调用私有方法,下面将详细介绍如何使用Java反射获取私有方法,准备工作我们需要准备一个包含私有方法的类,以下是一个简单……

    2025年10月15日
    2300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN