javaio怎么读取doc

“`java,// 需添加Apache POI依赖,import org.apache.poi.hwpf.HWPFDocument;,import org.apache.poi.hwpf.extractor.WordExtractor;,import java.io.FileInputStream;,// 读取doc文件示例,try (FileInputStream fis = new FileInputStream(“test.doc”)) {, HWPFDocument doc = new HWPFDocument(fis);, WordExtractor extractor = new WordExtractor(doc);, String text = extractor.getText();, System.out.println(text); // 输出文档文本内容,} catch (Exception e) { e.print

在Java中读取.doc文件(Microsoft Word旧版格式)需要借助第三方库,因为.doc文件是二进制格式的复合文档结构,无法通过标准的Java IO(如FileReaderBufferedReader)直接解析为文本内容,以下是使用Apache POI库读取.doc文件的详细方案:

javaio怎么读取doc


准备工作:添加Apache POI依赖

Apache POI是开源的Java库,支持操作Microsoft Office文档(包括.doc.docx),需在项目中引入以下依赖:

依赖类型 配置示例(Maven) 说明
Maven <dependency>n <groupId>org.apache.poi</groupId>n <artifactId>poi</artifactId>n <version>5.2.3</version>n</dependency> 用于.doc文件的核心依赖
Gradle implementation 'org.apache.poi:poi:5.2.3' 同上

注意:若需处理.docx文件,还需添加poi-ooxml依赖。

javaio怎么读取doc


读取.doc文件的步骤

创建输入流

FileInputStream fis = new FileInputStream("path/to/file.doc");

解析文档

使用HWPFDocument类(POI对.doc的支持):

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordTextExtractor;
HWPFDocument document = new HWPFDocument(fis);
WordTextExtractor extractor = new WordTextExtractor(document);
String text = extractor.getText(); // 提取纯文本

处理复杂内容

.doc文件可能包含段落、表格、图片等元素,需通过POI的API逐层解析:

javaio怎么读取doc

功能 对应类/方法 示例代码
获取段落文本 Range.getParagraphs() for (int i = 0; i < document.getRange().numParagraphs(); i++) { ... }
读取表格数据 Table[] tables = document.getTables(); 遍历tables数组,调用Table.getRows()Row.getCells()
提取元数据 DocumentSummaryInformation dsi = document.getDocumentSummaryInformation(); 获取作者、标题等信息

.doc.docx处理差异对比

特性 .doc处理方式 .docx处理方式
核心类 HWPFDocument XWPFDocument
文本提取 WordTextExtractor XWPFWordExtractor
表格处理 Table接口 XWPFTable

完整代码示例

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordTextExtractor;
import java.io.FileInputStream;
import java.io.IOException;
public class DocReader {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("example.doc");
        HWPFDocument document = new HWPFDocument(fis);
        WordTextExtractor extractor = new WordTextExtractor(document);
        String content = extractor.getText();
        System.out.println(content);
        extractor.close();
        document.close();
        fis.close();
    }
}

注意事项

  1. 性能问题.doc文件解析需加载整个文档到内存,大文件可能导致OOM错误,建议使用流式处理或限制文件大小。
  2. 兼容性:Apache POI对老旧.doc格式的某些特性(如嵌套表格、宏)支持有限,复杂文档可能需要手动调整。
  3. 替代方案:若允许修改源文件格式,建议将.doc转换为.docx,因POI对.docx的支持更完善且性能更佳。

FAQs

为什么不能用Java标准IO(如FileReader)直接读取.doc文件?

  • 原因.doc文件是二进制格式,包含字体、段落样式、嵌入对象等复杂结构,直接按文本读取会破坏格式并产生乱码,必须通过专用库解析二进制结构。

如何读取加密的.doc文件?

  • 解决:使用HWPFDocument的密码参数构造函数:
    HWPFDocument document = new HWPFDocument(fis, "password");

    若文档保护(如只读),需额外

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

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月23日 23:14
下一篇 2025年7月23日 23:19

相关推荐

  • 如何在Java中相加两个数字?

    在Java中实现两个数相加,可通过定义变量存储数值,使用+运算符计算和,最后用System.out.println()输出结果,示例代码:int a=5, b=3; System.out.println(a+b); 输出结果为8。

    2025年6月6日
    300
  • Java如何创建链表节点?

    在Java中创建链表节点需定义一个类,包含数据域和指向下一节点的引用,class Node { int data; Node next; },通过构造函数初始化数据并置next为null即可完成节点创建。

    2025年6月9日
    000
  • Java如何实现关闭窗口

    在Java中实现窗口关闭功能,可通过添加WindowListener监听器处理窗口事件,重写windowClosing方法,调用dispose()或System.exit()关闭当前窗口或结束程序,Swing中常用setDefaultCloseOperation设置默认关闭行为。

    2025年6月7日
    200
  • Java表格宽度如何调整

    在Java Swing中,可通过JTable的列模型设置宽度:使用TableColumn的setPreferredWidth()方法定义初始列宽,结合setMinWidth()/setMaxWidth()限制范围,还可通过JTable的setAutoResizeMode()控制自动调整行为,如JTable.AUTO_RESIZE_OFF禁用自动调整以保持固定宽度。

    2025年6月22日
    100
  • Java如何保存txt文件到文件夹

    在Java中保存数据到txt文件,可通过FileWriter、BufferedWriter或Files类实现,创建文件输出流,写入字符串内容并关闭资源,注意处理IOException异常确保文件操作安全。

    2025年6月7日
    100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN