`
liukai
  • 浏览: 706358 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

POI遍历文件夹读取word文档

阅读更多
package com;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class Test {

	public static String fileToRead2007 = "f:/tt.docx";
	public static String fileToRead2003 = "f:/spring2.5 学习笔记.doc";
	public static final int WORD_HTML = 8;
	private static ArrayList filelist = new ArrayList();
//	private static LinkedList filelist = new LinkedList();

	public static void main(String[] args) throws Exception {
		// 创建输入流读取DOC文件
		long a = System.currentTimeMillis();
		refreshFileList("f:\\word");

		for (int i = 0; i < filelist.size(); i++) {
			// 取得文件类型 2003
			//					System.out.println("filelist:"+filelist.get(i).toString());
			if (filelist.get(i).toString().substring(
					filelist.get(i).toString().length() - 3,
					filelist.get(i).toString().length()).equals("doc")) {
				System.out.println("filelist:" + filelist.get(i).toString());
				FileInputStream in = new FileInputStream(filelist.get(i)
						.toString());
				String wordText2003 = Test.extractTextFromDOC(in);
				System.out.println("wordText2003=======" + wordText2003);
			} else if (filelist.get(i).toString().substring(
					filelist.get(i).toString().length() - 4,
					filelist.get(i).toString().length()).equals("docx")) {
				System.out.println("filelist:" + filelist.get(i).toString());
				String wordText2007 = Test.extractTextFromDOC2007(filelist.get(
						i).toString());
				System.out.println("wordText2007=======" + wordText2007);
			}

		}
		System.out.println(System.currentTimeMillis() - a);
	}

	public static void wordToHtml(String docfile, String htmlfile) {
		ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word 

		try {
			app.setProperty("Visible", new Variant(false));
			Dispatch docs = app.getProperty("Documents").toDispatch();
			Dispatch doc = Dispatch.invoke(
					docs,
					"Open",
					Dispatch.Method,
					new Object[] { docfile, new Variant(false),
							new Variant(true) }, new int[1]).toDispatch();
			Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
					htmlfile, new Variant(WORD_HTML) }, new int[1]);
			Variant f = new Variant(false);
			Dispatch.call(doc, "Close", f);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			app.invoke("Quit", new Variant[] {});
		}

	}

	/**
	 * jacob word转html
	 * @param paths
	 * @param savepaths
	 */
	public static void change(String paths, String savepaths) {

		File d = new File(paths);
		System.out.println("d:" + d);
		// 取得当前文件夹下所有文件和目录的列表
		File lists[] = d.listFiles();
		String pathss = new String("");
		for (int i = 0; i < lists.length; i++) {

			if (lists[i].isFile()) {
				String fileName = lists[i].getName();
				String fileType = new String("");

				// 取得文件类型 2003
				fileType = fileName.substring((fileName.length() - 3), fileName
						.length());

				// 判断是否为doc文件
				if (fileType.equals("doc")) {
					System.out.println("当前正在转换......");

					// 打印当前目录路径
					System.out.println(paths);

					// 打印doc文件名
					System.out.println(fileName.substring(0,
							(fileName.length() - 4)));
					ActiveXComponent app = new ActiveXComponent(
							"Word.Application");// 启动word

					String docpath = paths + fileName;
					String htmlpath = savepaths
							+ fileName.substring(0, (fileName.length() - 4));

					String inFile = docpath;
					// 要转换的word文件
					String tpFile = htmlpath;
					// HTML文件

					boolean flag = false;

					try {
						app.setProperty("Visible", new Variant(false));

						// 设置word不可见
						Object docs = app.getProperty("Documents").toDispatch();
						Object doc = Dispatch.invoke(
								(Dispatch) docs,
								"Open",
								Dispatch.Method,
								new Object[] { inFile, new Variant(false),
										new Variant(true) }, new int[1])
								.toDispatch();

						//打开word文件
						Dispatch.invoke((Dispatch) doc, "SaveAs",
								Dispatch.Method, new Object[] { tpFile,
										new Variant(8) }, new int[1]);

						//作为html格式保存到临时文件
						Variant f = new Variant(false);
						Dispatch.call((Dispatch) doc, "Close", f);
						flag = true;
					} catch (Exception e) {
						e.printStackTrace();
					} finally {
						app.invoke("Quit", new Variant[] {});
					}
					System.out.println("转化完毕!");
				}

			} else {
				pathss = paths;
				//进入下一级目录
				pathss = pathss + lists[i].getName() + "";
				//递归遍历所有目录
				change(pathss, savepaths);
			}
		}
	}

	/**
	 * @Method: extractTextFromDOCX
	 * @Description: 从word 2007文档中提取纯文本
	 * 
	 * @param
	 * @return String
	 * @throws
	 */
	public static String extractTextFromDOC2007(String fileName)
			throws IOException, OpenXML4JException, XmlException {
		OPCPackage opcPackage = POIXMLDocument.openPackage(fileName);
		POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);
		return ex.getText();
	}

	/**
	 * @Method: extractTextFromDOCX
	 * @Description: 从word 2003文档中提取纯文本
	 * 
	 * @param
	 * @return String
	 * @throws
	 */
	public static String extractTextFromDOC(InputStream is) throws IOException {
		WordExtractor ex = new WordExtractor(is); // is是WORD文件的InputStream
		return ex.getTextFromPieces();
		//		return ex.getHeaderText();

	}

	/**
	 * 用迭代法遍历指定目录下所有的文件
	 * @param strPath
	 */
	public static void refreshFileList(String strPath) {
		File dir = new File(strPath);
		File[] files = dir.listFiles();

		if (files == null)
			return;

		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				refreshFileList(files[i].getAbsolutePath());
			} else {
				String strFileName = files[i].getAbsolutePath().toLowerCase();
				//	                System.out.println("---"+strFileName);
				filelist.add(files[i].getAbsolutePath());
			}
		}
	}
}
分享到:
评论

相关推荐

    java实现读取word文件并且上传到数据库

    2. 打开Word文件:使用POI API打开Word文档,这涉及到`XWPFDocument`类的使用,它是处理.docx格式的主要类。 3. 遍历文档内容:对于每个表格,我们可以获取`XWPFTable`对象,然后遍历行和单元格,提取所需数据。 4. ...

    android读取word文档

    在Android平台上,读取Word文档是一项常见的需求,无论是为了查看用户存储的个人文件还是作为应用程序功能的一部分。要实现这一功能,我们需要了解如何处理文本文件(如.txt)和Microsoft Word(.doc或.docx)文件。...

    (改进版本)利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码

    在这个"(改进版本)利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码"项目中,我们将深入探讨如何使用POI来处理Word文档。 首先,Apache POI提供了HWPF(Horizontally-Writeable & Portable ...

    android应用源码tree目录和读取word文档整合.zip源码资源下载

    2. 读取Word文档:使用POI提供的API打开和解析Word文档,例如`XWPFDocument`类用于处理.docx文件。 3. 数据提取:获取文档中的文本、段落、表格等元素,可能需要遍历文档结构并提取所需信息。 4. 显示内容:将提取的...

    word拆分及相关依赖.zip

    首先,通过POI读取原始Word文档,接着遍历文档中的每个段落或节(section),判断是否包含指定的关键字。如果包含,就使用POI-TL创建一个新的Word文档,并将这一节的内容写入新文件。以下是一个简单的代码示例: ``...

    记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率

    通过遍历文件夹,读取每个文件的内容并进行比较。对于文件内容的对比,可以使用`java.nio.file.Files`类提供的方法读取文件的字节流,然后进行逐字节比较。对于文件夹,可以递归地遍历子文件夹和文件,实现深度比较...

    读出一个文件夹中的所有DOC文件

    本文详细介绍了如何使用Java语言结合Apache POI库读取指定文件夹内的所有`.doc`格式的Word文档,并提取其中的文本内容。通过这种方式,开发者可以在没有安装Microsoft Office的情况下轻松处理Word文档,这对于自动化...

    java为多种文档(word ppt pdf excel)添加文本水印

    使用Free Spire.Doc for Java,我们可以方便地向Word文档添加水印。首先,你需要导入`com.spire.doc.*`相关的类。然后创建一个`Document`对象,加载待处理的Word文档。接着,创建一个`WatermarkOptions`对象,设置...

    Android应用源码利用poi将内容填到word模板.zip

    总的来说,"Android应用源码利用poi将内容填到word模板.zip"这个示例提供了在Android应用中利用Apache POI填充Word模板的方法,对于需要生成动态Word文档的开发者来说具有很高的参考价值。通过学习和理解这个示例,...

    Java 获取Word中的所有插入和删除修订.doc

    在 Word 文档中启用跟踪更改功能后,会记录文档中的所有编辑行为,例如插入、删除、替换和格式更改。这篇文章将介绍如何使用 Java 获取 Word 文档中的所有插入和删除修订。 引入 Jar 为了使用 Spire.Doc for Java ...

    POI 官方API大全及基本操作实例(含jar包)

    8. **API文档**:apidocs 文件夹通常包含详细的Javadoc,它是了解POI库各个类和方法的官方参考,提供了完整的接口描述、参数说明和使用示例。 学习和实践这些API,结合提供的jar包,你将能够高效地实现Java与Excel...

    Text转Word(文本文档转word)

    这可能涉及到对Word文档API的调用,例如使用Microsoft Office Interop库(适用于.NET环境)或使用开源库如Apache POI(Java)来操作Word文档。 4. **批量处理**:批量转换功能意味着程序需要遍历指定目录下的所有....

    word2pdf_demo.zip

    3. **POI的使用**:使用POI读取Word文档,首先需要创建`XWPFDocument`对象,然后遍历文档的段落、表格、图片等元素。例如: ```java FileInputStream fis = new FileInputStream("input.docx"); XWPFDocument doc...

    java word转html

    Apache POI是一个流行的Java库,专门用于读取和写入Microsoft Office格式的文件,包括Word文档。通过使用POI,我们可以访问Word文档的内部结构,提取文本和样式信息,然后手动构建HTML代码。以下是一个简单的步骤...

    Java操作Word模板实现动态数据输出

    2. **读取Word模板文件**:使用Apache POI提供的类(如XWPFDocument)读取模板文件。 3. **数据填充**:遍历文档中的所有占位符(如上面提到的特殊符号),根据数据库查询结果进行替换。 4. **生成Word文件**:将...

    java解析word文件的相关代码

    - 如果需要处理多个位于不同目录下的Word文件,可以通过编写递归函数来实现深度遍历文件夹结构,并对每个Word文件执行文本提取操作。 - **文本内容的保存**: - 提取的文本内容不仅可以打印到控制台,还可以保存到...

    用java从doc和docx格式的word文档中提取图片.doc

    在Java编程环境中,提取DOC和DOCX格式的Word文档中的图片是一项常见的任务,尤其是在处理大量文档时。这两种格式由于其内部存储方式不同,提取图片的方法也有所不同。 对于**DOCX**格式的文档,正如描述中指出的,...

    读取固定路径文件夹下文件内容是否包含搜索的内容.rar

    如果需要读取的文件是Excel或Word文档,Apache POI库可以帮助我们解析这些文件的内容。例如,使用`XSSFWorkbook`和`XSSFSheet`类可以读取Excel的XLSX格式文件。 7. **iText库**:压缩包中也包含了`itextpdf`的库,...

    WordToPdf.zip

    在这个项目中,这些类将用于遍历文件夹中的Word文档并进行转换。 3. **Word文档处理**:为了读取和转换Word文档,C#可以利用Microsoft Office Interop库,它允许程序与Office应用程序进行交互。不过,这种方法需要...

Global site tag (gtag.js) - Google Analytics