使用POI读写Word文件(兼容doc与docx版本)_阿冲的博客-程序员ITS203

技术标签: java  office  poi  word  

调用示例:

 

File wordFile = new File("D:\\temp.doc");

//读取Word文档中所有文本内容,以字符串形式返回
System.out.println(WordFileUtil.extractTextFromWordFile(wordFile));

 

工具类源码:

 

Word2003版本工具类:

 

/**
 * Word2003FileUtil.java
 * Copyright ® 2010 窦海宁
 * All right reserved
 */

package org.aiyu.core.common.util.file.office;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;
import org.apache.poi.hwpf.extractor.WordExtractor;

/**
 * <p>Word2003版文件工具类
 * 
 * <p>通用的Word2003版文件工具类,可用于从Word文档中抽取文本信息
 * 
 * @author  窦海宁, [email protected]
 * @since   AiyuCommonCore-1.0
 * @version AiyuCommonCore-1.0
 */
public abstract class Word2003FileUtil {

	/**
	 * <p>从Excel文档中提取文本信息
	 * 
	 * @param  wordFile Excel文件
	 * 
	 * @return 提取后的文本信息
	 * 
	 * @modify 窦海宁, 2013-08-12
	 */
	protected static String extractTextFromWordFile(File wordFile) {

		String returnValue = null;
		if (wordFile != null) {

			if (wordFile.isFile()) {

				InputStream inputStream = null;
				try {

					inputStream = new FileInputStream(wordFile);
					WordExtractor wordExtractor = new WordExtractor(inputStream);
					returnValue = wordExtractor.getText();
				} catch (Exception ex) {

					System.err.println(ex.getMessage());
				} finally {

					IOUtils.closeQuietly(inputStream);
				}
			}
		}
		return returnValue;
	}

}
 
Word2007版本工具类:
 
/**
 * Word2007FileUtil.java
 * Copyright &reg; 2017 窦海宁
 * All right reserved
 */

package org.aiyu.core.common.util.file.office;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

/**
 * <p>Word2007版文件工具类
 * 
 * <p>通用的Word2007版文件工具类,可用于从Word文档中抽取文本信息
 * 
 * @author  窦海宁, [email protected]
 * @since   AiyuCommonCore-1.0
 * @version AiyuCommonCore-1.0
 */
public abstract class Word2007FileUtil {

	/**
	 * <p>从Excel文档中提取文本信息
	 * 
	 * @param  wordFile Excel文件
	 * 
	 * @return 提取后的文本信息
	 * 
	 * @modify 窦海宁, 2017-01-18
	 */
	protected static String extractTextFromWordFile(File wordFile) {

		String returnValue = null;
		if (wordFile != null) {

			if (wordFile.isFile()) {

				InputStream inputStream = null;
				try {

					inputStream = new FileInputStream(wordFile);

					XWPFDocument      document      = new XWPFDocument(inputStream);
					XWPFWordExtractor wordExtractor = new XWPFWordExtractor(document);
					returnValue = wordExtractor.getText();
				} catch (Exception ex) {

					System.err.println(ex.getMessage());
				} finally {

					IOUtils.closeQuietly(inputStream);
				}
			}
		}
		return returnValue;
	}

}
 
统一调用工具类:
 
/**
 * WordFileUtil.java
 * Copyright &reg; 2017 窦海宁
 * All right reserved
 */

package org.aiyu.core.common.util.file.office;

import java.io.File;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * <p>Word文件工具类
 * 
 * <p>通用的Word文件工具类,可用于从Word文档中抽取文本信息
 * 
 * @author  窦海宁, [email protected]
 * @since   AiyuCommonCore-1.0
 * @version AiyuCommonCore-1.0
 */
public abstract class WordFileUtil {

	/**
	 * <p>从Excel文档中提取文本信息
	 * 
	 * @param  wordFile Excel文件
	 * 
	 * @return 提取后的文本信息
	 * 
	 * @modify 窦海宁, 2017-02-06
	 */
	public static String extractTextFromWordFile(File wordFile) {

		String resultText = null;

		if (wordFile != null && wordFile.exists()) {

			String extension = FilenameUtils.getExtension(wordFile.getName());
			if (StringUtils.equalsIgnoreCase("doc" , extension)) {

				//Office2003版文件处理
				resultText = Word2003FileUtil.extractTextFromWordFile(wordFile);
			} else if (StringUtils.equalsIgnoreCase("docx" , extension)) {

				//Office2007版文件处理
				resultText = Word2007FileUtil.extractTextFromWordFile(wordFile);
			} else {

				//文件类型有误
			}
		}

		return resultText;
	}

}
 
统一调用工具类通过文件扩展名(DOC与DOCX,不区分大小写)判断文件版本,暂时没有想到更好的办法;本工具类使用POI_3.15实现,无须目标机器安装OFFICE软件也可进行文件读写。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chong0660/article/details/84468555

智能推荐

android gps 电子围栏,GPS定位系统平台电子围栏的功能和应用_ZzzCola的博客-程序员ITS203

原标题:GPS定位系统平台电子围栏的功能和应用GPSBD通用系统是一套集成实时定位,历史轨迹,电子围栏,报警通知,统计报表,指令下发于一体的多功能型监控系统;GPSBD通用系统是一套专为二次开发而设计的;系统里面的围栏分为以下几种:圆形围栏、线性围栏、多边形围栏及行政区域围栏; 这里所说的电子围栏是指通过平台来设置规划一个区域起到类似围栏的效果,通过围栏跟相关设备进行绑定,这样就能知道这个设备...

ORB-SLAM 2+3 rgbd稠密地图 (地图可回环)_小白逆袭的博客-程序员ITS203_orbslam3稠密

高博曾经在他的github上提供过,但因为大佬时间少,并没有将回环加入到稠密地图,现提供一个可回环的稠密地图版本https://github.com/tiantiandabaojian/ORB-SLAM2_RGBD_DENSE_MAP.git第一张图片是TUM数据集未回环的地图第二张图片是经过回环的地图第三张是博主自己用Kinect V2跑出的地图望能帮到各位...

te42_helixprocess的博客-程序员ITS203

# -*-coding:utf-8-*- class TheThing(object): def __init__(self): self.number = 0#初始化 .number是self的一个属性 self就是自己 def some_function(self): print&quot;i got called.&quot;#类下面的函数 打印xxxxx def add_m...

搞定python多线程和多进程_feng98ren的博客-程序员ITS203

https://www.cnblogs.com/whatisfantasy/p/6440585.html?utm_source=itdadao&amp;amp;utm_medium=referral 1 概念梳理:1.1 线程1.1.1 什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可...

JpaSpecificationExecutor_星峰之耀的博客-程序员ITS203_jpaspecificationexecutor

Specification分析Specification 是一个函数式接口,里面有一个抽象的方法:Predicate toPredicate(Root var1, CriteriaQuery&lt;?&gt; var2, CriteriaBuilder var3);实现该方法我们不需要弄清楚 Predicate , Root , CriteriaQuery 和 CriteriaBuilder 四个类的使用规则:现在有这样的一条 sql 语句 : select * from teacher where

VS2008发布网站生成一个固定DLL,之后出现合并程序集时出错的解决办法 _一天到晚游泳的鱼2016的博客-程序员ITS203

  VS2008发布网站生成一个固定DLL,之后出现合并程序集时出错的解决办法 收藏 在使用VS2005和VS2008来开发网站,在发布网站时不会像VS2003一样生成规则的DLL文件,而生成的DLL文件名含有随机数不固定且不能一个项目生成一个DLL文件,每次更新的时候的全部更新才行。为了做到像vs2003一样,微软发布了WebDeployment Project 插件可以解决此问题:http:/

随便推点

Java获取系统当前时间不正确_楠之枫雪的博客-程序员ITS203_java 获取当前时间错误

项目过程中生成系统当前时间时遇到了一个小问题,就是生成的时间是12小时进制的不是24小时进制的,后来又发现生成的时间更当前系统时间对不上,两个问题出现的都是因为格式大小没有区分。yyyyMMdd HH:mm:ss:H是大写的话是24小时进制的。 yyyyMMdd hh:mm:ss:h是小写的话是12小时进制的,注意分的mm与秒的ss一定要小写,不然结果不是正常想要的。测试了下,年yy可以是大写也可

多线程专题 - 锁的使用_且行路莫问蹇的博客-程序员ITS203

使用ReentrantLock类 使用ReentrantReadWriteLock类 1.使用ReentrantLock类样例代码:import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BusinessService {...

QString和string的相互转换及乱码处理_yanqs_whu的博客-程序员ITS203

转载: http://yz0515.com/2017/02/16/QString%E5%92%8Cstring%E7%9A%84%E7%9B%B8%E4%BA%92%E8%BD%AC%E6%8D%A2%E5%8F%8A%E4%B9%B1%E7%A0%81%E5%A4%84%E7%90%86/String和QString之间的转化数据结构课程设计中,用Qt玩图形化,经常因为QString和strin

MD5算法的编程实现_*南有乔木的博客-程序员ITS203_md5实现

MD5算法的编程实现【实验目的】【实验环境】【实验预备知识点】【实验内容】【实验步骤】【实验思考题】【实验目的】1、理解Hash函数的计算原理和特点。2、理解MD5算法原理。3、了解MD5值的生成过程。【实验环境】windows虚拟机在目录C:\Program Files\Microsoft Visual Studio\MyProjects\MD5下打开MD5.dsw,在VC6.0环境下编译代码。【实验预备知识点】MD5是一种常见的单项散列算法,用以提供消息的完整性保护,计算机界广泛使用的

连接mysql的可视化工具_普通网友的博客-程序员ITS203_连接mysql的可视化工具

前言本系列的目的是明明白白、彻彻底底的搞定日期/时间处理的几乎所有case。上篇文章铺设所有涉及到的概念解释,例如GMT、UTC、夏令时、时间戳等等,若你还没看过,不仅强烈建议而是强制建议你前往用花5分钟看一下,因为日期时间处理较为特殊,实战必须基于对概念的了解,否则很可能依旧雾里看花。说明:日期/时间的处理是日常开发非常常见的老大难,究其原因就是对日期时间的相关概念、应用场景不熟悉,所以不要忽视它本文落地实操,二者相辅相成,缺一不可。本文内容较多,文字较长,预计超2w字,旨在全面的彻底帮你搞定J

介绍一下OGC、WMS、WFS、WCS等几个概念_GISEarth的博客-程序员ITS203_ogc wfs

1.OGC         Open Geospatial Consortium——开放地理信息联盟,是一个非盈利的志愿的国际标准化组织,引领着空间地理信息标准及定位基本服务的发展目前在空间数据互操作领域,基于公共接口访问模式的互操作方法是一种基本的操作方法。通过国际标准化组织(ISO/TC211)或技术联盟(如OGC)制定空间数据互操作的接口规范,GIS软件商开发遵循这一接口规范的空间数

推荐文章

热门文章

相关标签