加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用POI的WordExtractor批量提取Word文件的文本内容

(2009-10-27 15:02:27)
标签:

it

分类: JAVA

使用POI的WordExtractor批量提取Word文件的文本内容

依然使用到poi-3.0.2的两个jar包,如下为工程的.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="E:/JAR包/POI/poi-3.0.2-FINAL-20080204.jar"/>
<classpathentry kind="lib" path="E:/JAR包/POI/poi-scratchpad-3.0.2-FINAL-20080204.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

这里仅仅使用到org.apache.poi.hwpf.extractor.WordExtractor类提取Word文件中的文本内容。

实现过程:

从本地磁盘中读取某个文件目录下的Word文件,然后提取出所有的Wrod文件的文本内容,直接写入到对应的以该Word文件名称命名的txt文件中,保存到本地磁盘中。

测试的实现类如下所示:

package org.shirdrn.word;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hwpf.extractor.WordExtractor;

public class WordBatchExtractor {

private String path;

public void setPath(String path){
   this.path = path;
}

public FileInputStream getFileInputStream(File file) throws FileNotFoundException {
   return new FileInputStream(file);
}


public void extractBatchWordFiles() throws IOException{
   File fileDir = new File(this.path);
   String path = fileDir.getPath()+"\\";
   if(fileDir.canRead()){
    if(fileDir.isDirectory()){
     String[] files = fileDir.list();
     if(files != null){
      for (int i = 0; i < files.length; i++){
       File file = new File(path+files[i]);
       FileInputStream fileInputStream = getFileInputStream(file);
       WordExtractor wordExtractor = new WordExtractor(fileInputStream);
       outputToPath(wordExtractor,file.getPath());
      }
     }
    }
   }
}

public void outputToPath(WordExtractor wordExtractor,String file) throws IOException{
   String outputFilePath = file.substring(0, file.lastIndexOf("."))+".txt";
   File outputFile = new File(outputFilePath);
   outputFile.createNewFile();
   System.out.println("正在处理Word文件 "+file+"(约"+new File(file).length()/1024+"KB) ...");
   String wordText = wordExtractor.getText();
   BufferedWriter bufferedWriter = null;
   FileWriter output = new FileWriter(new File(outputFilePath));
   bufferedWriter = new BufferedWriter(output);
   bufferedWriter.write(wordText);
   bufferedWriter.newLine();
   bufferedWriter.close();
}
}

首先,在指定的目录中添加Word文件,我使用的测试文件如以下所示:

E:\POI\word 的目录

2008-05-01 11:08    <DIR>          .
2008-05-01 11:08    <DIR>          ..
2008-04-06 12:42           193,024 BEA Portal培训.doc
2008-04-06 11:54           140,288 Jboss 下开发EJB简介.doc
2008-04-28 16:15            25,088 JBoss3.0 下配置和部署EJB简介.doc
2008-04-06 12:18            45,568 JMS入门.doc
2008-04-06 12:44           261,632 taglib(struts2标签).doc
2008-04-06 12:40         5,222,400 WebSphere Portal V6.0 安装指南.doc
2008-04-06 12:37         3,906,560 WebSphere Portal技术概述.doc
2008-04-06 13:00         4,466,176 WPS6.0安装配置文档 .doc
2008-04-28 16:15            25,088 配置和部署EJB.doc

测试主函数为:

public static void main(String[] args) {
   Date start = new Date();
   WordBatchExtractor wordBatchExtractor = new WordBatchExtractor();
   wordBatchExtractor.setPath("E:\\POI\\word\\");
   try {
    wordBatchExtractor.extractBatchWordFiles();
   } catch (IOException e) {
    e.printStackTrace();
   }

   Date end = new Date();
   long timeOfExtractWordFiles = end.getTime() - start.getTime();
   System.out.println("将Word文件处理成txt文件用时 "+timeOfExtractWordFiles/1000+" 秒(s).");
}

这里,只有提取Word文件文本内容使用了WordExtractor类,其它的,写入到txt文件及其本地磁盘,都是使用java.io包中一些使用类实现的。

测试结果如下所示:

正在处理Word文件 E:\POI\word\BEA Portal培训.doc(约188KB) ...
正在处理Word文件 E:\POI\word\Jboss 下开发EJB简介.doc(约137KB) ...
正在处理Word文件 E:\POI\word\JBoss3.0 下配置和部署EJB简介.doc(约24KB) ...
正在处理Word文件 E:\POI\word\JMS入门.doc(约44KB) ...
正在处理Word文件 E:\POI\word\taglib(struts2标签).doc(约255KB) ...
正在处理Word文件 E:\POI\word\WebSphere Portal V6.0 安装指南.doc(约5100KB) ...
正在处理Word文件 E:\POI\word\WebSphere Portal技术概述.doc(约3815KB) ...
正在处理Word文件 E:\POI\word\WPS6.0安装配置文档 .doc(约4361KB) ...
正在处理Word文件 E:\POI\word\配置和部署EJB.doc(约24KB) ...
将Word文件处理成txt文件用时 2 秒(s).

可以到目录E:\POI\word\下面查看生成的txt文件,与上面的Word文件一一对应,列表如下所示:

E:\POI\word 的目录

2008-05-01 11:21            12,147 BEA Portal培训.txt
2008-05-01 11:21            11,276 Jboss 下开发EJB简介.txt
2008-05-01 11:21               900 JBoss3.0 下配置和部署EJB简介.txt
2008-05-01 11:21            13,385 JMS入门.txt
2008-05-01 11:21            23,339 taglib(struts2标签).txt
2008-05-01 11:21            12,570 WebSphere Portal V6.0 安装指南.txt
2008-05-01 11:21            70,386 WebSphere Portal技术概述.txt
2008-05-01 11:21            31,094 WPS6.0安装配置文档 .txt
2008-05-01 11:21               900 配置和部署EJB.txt

上面实现中,Word文件的总大小为13.6MB,转化成txt文件后只有171KB

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有