通用各类文档读写的设计与实现
在我们日常的项目开发中,经常碰到需要读取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不存在"); } 欢迎各位拍砖讨论!
页:
[1]