概述
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中的文本信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复