六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

通用各类文档读写的设计与实现

[复制链接]

升级  28.67%

86

主题

86

主题

86

主题

举人

Rank: 3Rank: 3

积分
286
 楼主| 发表于 2013-1-27 04:42:22 | 显示全部楼层 |阅读模式
在我们日常的项目开发中,经常碰到需要读取word等文档的需求,如何来设计和实现呢?我的实现代码如下:

  • 定义一个IDoc的接口
 
package com.common.doc;public interface IDoc {public String read();public boolean write(String str);public boolean rename(String newName);public boolean exists();} 

  • 定义一个AbstractDoc的抽象类,这个类实现一般的文件操作,如存在判断等
 
package com.common.doc;import java.io.File;public class AbstractDoc implements IDoc{private String filepath;public String getFilepath() {return filepath;}public AbstractDoc(String path){this.filepath = path;}public boolean exists() {    File f=new File(filepath);    return f.exists();}@Overridepublic String read(){return "";}public boolean rename(String newName) {    try{        File f=new File(filepath);        String str=filepath.substring(0,filepath.lastIndexOf("\\"));        f.renameTo(new File(str+"\\"+newName));        }catch(Exception ex)        {          return false;        }        return true;}@Overridepublic boolean write(String str) {return false;}} 

  • 各个文档继承AbstractDoc的read,write重载函数即可
如Wod实现代码如下:
package com.common.doc;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.poi.hwpf.extractor.WordExtractor;public class WordDoc extends AbstractDoc{public WordDoc(String path){super(path);}public String read(){StringBuffer sb = new StringBuffer();try {InputStream is = new FileInputStream(super.getFilepath());WordExtractor ex = new WordExtractor(is);// is是WORD文件的InputStreamsb.append(ex.getText());} catch (Exception e) {e.printStackTrace();}return sb.toString();}} 

  • 测试代码
      IDoc doc = new WordDoc("c:\\测试文档.doc");      if(doc.exists()){      System.out.println(doc.read());      }else{      System.out.println("word不存在");      } 欢迎各位拍砖讨论!
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表