使用POI读写Word文件(兼容doc与docx版本)

调用示例:

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软件也可进行文件读写。

猜你喜欢

转载自chong0660.iteye.com/blog/1923735