首页 > 代码库 > Java读取word文件的程序演示

Java读取word文件的程序演示

完成对office文件的操作可以借助apache.poi包(我用的poi-3.10-FINAL),导入相应的jar包(最好全部导入)

下面的程序演示了一些操作word的过程,详细的函数功能可以查看此包的官方API

import java.io.*;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.*;
import org.apache.poi.hwpf.usermodel.Range;
//xwpf专门加强处理Word2007 .docx 格式
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class WordReader {

	WordExtractor wordExtractor;

	public static void main(String[] args) {
		System.out.println("该word文档(docx格式)总页数如下:");
		new WordReader().getPageCount("F:\\数据挖掘及其应用论文格式.docx");
		
		System.out.println("\n获取整个word文本内容:");
		System.out.println(new WordReader().getTextFromWord("F:\\word2003.doc"));
		
		System.out.println("按段获取文本内容:");
		System.out.println(new WordReader().getTextByParagraph("F:\\word2003.doc"));
	}

	// 统计word文件总页数(仅docx格式的有效!) doc格式也有相应的方法,但是由于doc本身的问题,导致获取的页数总是错误的!
	public void getPageCount(String filePath) {
		XWPFDocument docx;
		try {
			docx = new XWPFDocument(POIXMLDocument.openPackage(filePath));
			int pages = docx.getProperties().getExtendedProperties()
					.getUnderlyingProperties().getPages();// 总页数
			int wordCount = docx.getProperties().getExtendedProperties()
					.getUnderlyingProperties().getCharacters();// 忽略空格的总字符数
			// 另外还有getCharactersWithSpaces()方法获取带空格的总字数。
			System.out.println("Total pages=" + pages +"页; "+ " Total wordCount=" + wordCount);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 获取word文档中所有文本的方法(仅对doc文件有效)
	public String getTextFromWord(String filePath) {
		String res = null;
		File file = new File(filePath);
		try {
			FileInputStream fis = new FileInputStream(file);
			wordExtractor = new WordExtractor(fis);
			// 获取所有文本
			res = wordExtractor.getText();
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return res;
	}

	// 按段获取文本(仅对doc文件有效)
	public String getTextByParagraph(String filePath) {
		String res = null;
		FileInputStream fis;
		try {
			fis = new FileInputStream(filePath);
			wordExtractor = new WordExtractor(fis);
			// 获取段文本
			String[] strArray = wordExtractor.getParagraphText();
			for (int i = 0; i < strArray.length; i++) {
				System.out.println("第 " + (i+1)+" 段\n"+strArray[i]);
			}

			// 这个构造函数从InputStream中加载Word文档
			HWPFDocument doc = new HWPFDocument(
					(InputStream) new FileInputStream(filePath));
			// 这个类为HWPF对象模型,对文档范围段操作
			Range range = doc.getRange();
			int num = range.numParagraphs();
			System.out.println("该文档共" + num + "段");//空行也算一段
			System.out.println("获取第"+num+"段内容如下:\n"+range.getParagraph(num-1).text());
			fis.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
		return res;
	}
}