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
    评论
要实现基于Java合并docdocx格式Word文件,可以考虑使用Apache POI库来操作Word文件。下面是一个简单的示例代码,可以将多个docx文件合并为一个: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.xwpf.usermodel.*; public class MergeWordFiles { public static void main(String[] args) throws IOException { String[] filesToMerge = {"file1.docx", "file2.docx", "file3.docx"}; String mergedFileName = "merged.docx"; List<XWPFDocument> files = new ArrayList<>(); for (String fileName : filesToMerge) { XWPFDocument document = new XWPFDocument(OPCPackage.open(fileName)); files.add(document); } XWPFDocument mergedDocument = mergeDocuments(files); FileOutputStream outputStream = new FileOutputStream(new File(mergedFileName)); mergedDocument.write(outputStream); outputStream.close(); } private static XWPFDocument mergeDocuments(List<XWPFDocument> files) { XWPFDocument mergedDocument = new XWPFDocument(); XWPFParagraph newParagraph; for (XWPFDocument document : files) { for (XWPFParagraph paragraph : document.getParagraphs()) { newParagraph = mergedDocument.createParagraph(); newParagraph.setAlignment(paragraph.getAlignment()); for (XWPFRun run : paragraph.getRuns()) { newParagraph.createRun().setText(run.getText(0)); } } for (XWPFTable table : document.getTables()) { mergedDocument.createTable().addNewCol(); mergedDocument.createTable().addNewRow(); for (XWPFTableRow row : table.getRows()) { XWPFTableRow newRow = mergedDocument.createTable().getRow(0); newRow.setHeight(row.getHeight()); for (XWPFTableCell cell : row.getTableCells()) { XWPFTableCell newCell = newRow.addNewTableCell(); newCell.setVerticalAlignment(cell.getVerticalAlignment()); newCell.setAlignment(cell.getAlignment()); newCell.setText(cell.getText()); } } } } return mergedDocument; } } ``` 这个示例代码,先将要合并的docx文件读取为XWPFDocument对象,然后将所有文件合并到一个新的XWPFDocument对象,最后将合并后的XWPFDocument对象写入到一个新的docx文件。 需要注意的是,这个示例代码只能合并docx格式Word文件,如果需要合并doc格式Word文件,需要使用HWPF库进行操作。同时,如果要处理较大的Word文件,可能需要考虑分段处理,以避免内存溢出等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值