java读取word格式.doc或者.docx中的内容(APACHE POI)

2 篇文章 0 订阅

需求:从word中提取手机号码

首先下载Apache POI 下载地址
我下载的是二进制的文件:
如图

解压后:
这里写图片描述
注意:为了方便我把这六个jar包都导入了eclipse里,还要把ooxml-lib里的jar包也导入,要不然会报错:java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException
所以最后导入的包为:
jar包
至此还要注意不要有旧版本的poi的jar包存在,要不然会报一些错误,我就是在刚一开始时候先导入了一个tm-extractors-0.4.jar(内部封装的是poi),然后没有删掉又导入了新的poi的包,在运行时一直报错:java.lang.VerifyError: (class: 。。。。。后来goole后才找到原因是因为有旧的版本POI:常见问题集合

在准备好了之后就可以对word操作了,由于word一般有.doc和.docx两种格式,所以要分开判断并执行代码:

import java.io.FileInputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

public class ReadWordByPoi4 {
    public static String getPhoneNum(String filePath,String fileName){
        String text="";
        String phoneNum="";
        String realPath=filePath+"/"+fileName;//拼接为含名字的路径
        try {
            if(fileName.endsWith(".doc")){   //doc为后缀的
                FileInputStream in;
                in = new FileInputStream(realPath);
                WordExtractor extractor = new WordExtractor(in);
                text = extractor.getText();
            }
            if(fileName.endsWith(".docx")){  //docx为后缀的
                XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(realPath)); 
                text = docx.getText();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //正则表达式判断手机号
        if(!"".equals(text)){
            Pattern pattern = Pattern.compile("(?<!\\d)(?:(?:1[34578]\\d{9})|(?:861[34578]\\d{9}))(?!\\d)"); 
               Matcher matcher = pattern.matcher(text); 
                   StringBuffer bf = new StringBuffer(64); 
                   while (matcher.find()) { 
                     bf.append(matcher.group()).append(","); 
                   } 
                   int len = bf.length(); 
                   if (len > 0) { 
                     bf.deleteCharAt(len - 1); 
                   } 
             phoneNum=bf.toString();
        }
        return phoneNum;
    }
    public static void main(String[] args) throws Exception{
        System.out.println(getPhoneNum("D:/shiyanshuju","xx.doc"));
    }

}  

参考:http://blog.csdn.net/njchenyi/article/details/6901605

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值