Java Word提取内容

该代码示例展示了如何使用ApachePOI的XWPFWordExtractor和Hutool库从Word文档中提取文字,并进行特殊字符转换和文本清理。程序首先通过HttpUtil获取云存储上的Word文档,然后创建临时文件,接着使用XWPFDocument解析文档内容,最后将提取的文本处理并转化为列表。
摘要由CSDN通过智能技术生成
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
    		<groupId>cn.hutool</groupId>
  		    <artifactId>hutool-all</artifactId>
 		    <version>5.8.16</version>
		</dependency>
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * word文档提取文字集合
 */
@Slf4j
public class Word2ListUtil {
    /**
     * word文档提取文字集合
     */
    public static List<String> word2List(String filePath) throws IOException {
        XWPFWordExtractor extractor = null;
        FileInputStream fis = null;
        InputStream inputStream = null;
        File file = null;
        try {
            // 获取云存储Word文档输入流
            inputStream = HttpUtil.createGet(filePath).execute().bodyStream();
            // 创建临时文件
            File tempFile = File.createTempFile("tmp", ".doc");
            // 将输入流写入临时文件
            file = FileUtil.writeFromStream(inputStream, tempFile);
            log.info("临时文件所在路径: {}", file);
            // 输入流转文件输入流
            fis = new FileInputStream(file);
//            fis = new FileInputStream(filePath);
            XWPFDocument document = new XWPFDocument(fis);
            // 提取文本内容
            extractor = new XWPFWordExtractor(document);
            // 特殊操作:将文本内容中所有中文字符转成英文并去掉空格
            String text = extractor.getText().replaceAll(":", ":")
                    .replaceAll("。", ".")
                    .replaceAll(" ", "")
                    .replaceAll(";", ";")
                    .replaceAll(",", ",");
            // 文本根据换行符分割数组
            String[] textArray = text.split("\n");
            // 去掉数组内空串行并组装集合
            return Arrays.stream(textArray).filter(str -> !str.trim().isEmpty()).collect(Collectors.toList());
        } catch (Exception e) {
            log.error("word文档提取文字集合失败异常! {}", e.getMessage());
            e.printStackTrace();
        } finally {
        	// 资源关闭遵循:先开后关原则
            if (ObjectUtil.isNotNull(extractor)) {
                extractor.close();
            }
            if (ObjectUtil.isNotNull(fis)) {
                fis.close();
            }
            if (ObjectUtil.isNotNull(inputStream)) {
                inputStream.close();
            }
            if (ObjectUtil.isNotNull(file)) {
            	// 删除临时文件
                boolean deleteFlag = file.delete();
                log.info("临时文件删除状态: {}", deleteFlag);
            }
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值