我是靠谱客的博主 靓丽银耳汤,最近开发中收集的这篇文章主要介绍Java提取Doc,Docx中的文本信息Java提取Doc,Docx中的文本信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java提取Doc,Docx中的文本信息

文章目录

  • Java提取Doc,Docx中的文本信息
    • 1 代码效果
    • 2 代码实现

1 代码效果

案例word,Doc,Docx2个版本都有
在这里插入图片描述
提取后效果docx
在这里插入图片描述
提取后效果doc
在这里插入图片描述

2 代码实现

import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
 * 将doc/docx 部分信息提取
 * 推荐pom jdk1.8+
 * 	<dependency>
	  <groupId>commons-io</groupId>
	  <artifactId>commons-io</artifactId>
	  <version>2.9.0</version>
	</dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>5.2.2</version>
    </dependency>
    <dependency>
        <groupId>com.deepoove</groupId>
        <artifactId>poi-tl</artifactId>
        <version>1.12.0</version>
    </dependency>
 */
public class TestWordToXml {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		try {
			final List<String> data = new ArrayList<String>();
			final String attr = ".doc";
			final String inPath = "F:\BiaoQian" + attr;
			final InputStream inputStream = Files.newInputStream(Paths.get(inPath));
			if (inPath.endsWith("docx")) {//docx处理
				final XWPFDocument docx = new XWPFDocument(inputStream).getXWPFDocument();
				final Node bodyNode = docx.getDocument().getBody().getDomNode();
				seeDocxNode(bodyNode,data);
			} else {//doc处理
				final HWPFDocument document = new HWPFDocument(inputStream);
				System.out.println(document.getDocumentText().replaceAll("", " "));
				//data.add(document.getDocumentText().replaceAll("", " "));
			}
			Files.write(Paths.get("F:\BiaoQianXml.log"),data,Charset.forName("UTF-8"));
		    System.out.println("解析完成");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 递归遍历node
	 * @param bodyNode
	 * @param data
	 */
	@SuppressWarnings("static-access")
	private static void seeDocxNode(final Node node,final List<String> data) {
		final NodeList list = node.getChildNodes();
		final NamedNodeMap attr = node.getAttributes();
		String attrStr = "0";
		String childStr = "";
		String childStrName = "";
		if (attr!=null) {
			attrStr = "" + attr.getLength();
		}
		if (list!=null) {
			childStr = "" + list.getLength();
			for (int i = 0; i < list.getLength(); i++) {
				final Node childNode = list.item(i);
				childStrName = childNode.getNodeName()+","+childStrName;
			}
			if (list.getLength()>0) {
				childStrName = "t子节点名称["+childStrName.substring(0,childStrName.length()-1)+"]";
			}
		}
		String zhi = "";
		if (StringUtils.isNotEmpty(node.getNodeValue())) {
			zhi = "t节点值:"+node.getNodeValue();
		}
		if (node.TEXT_NODE==node.getNodeType()) {//放开这个可解析所有结构
			data.add("节点类型:"+node.getNodeType()+"t属性个数:"+attrStr+"t子节点个数:"+childStr+"t节点名:"+node.getNodeName()+childStrName+zhi);
		}
		if (list!=null) {
			for (int i = 0; i < list.getLength(); i++) {
				final Node childNode = list.item(i);
				childStrName = childStrName + "," + childNode.getNodeName();
				seeDocxNode(childNode, data);
			}
		}
	}
}

最后

以上就是靓丽银耳汤为你收集整理的Java提取Doc,Docx中的文本信息Java提取Doc,Docx中的文本信息的全部内容,希望文章能够帮你解决Java提取Doc,Docx中的文本信息Java提取Doc,Docx中的文本信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部