Java利用POI读写word文件
对于word文档的读写等操作是大多数开发者都会遇到的问题。Apache的POI是解决word读写的方案之一。本文展示的是通过HWPFDocument读写文件。
一、读取word内容
public class HwpfTest { public static void hwpfRead() throws IOException { File file = new File("C:\\Users\\Desktop\\test.doc"); String doc1 = ""; String doc2 = ""; try { FileInputStream is= new FileInputStream(file); HWPFDocument doc = new HWPFDocument(is); String doc1 = doc.getDocumentText(); System.out.println(doc1); Range rang = doc.getRange(); String doc2 = rang.text(); System.out.println(doc2); this.closeStream(is); } catch (Exception e) { e.printStackTrace(); } } /** * 关闭输入流 * @param is */ private void closeStream(InputStream is) { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } }
二、向word文件写入内容
在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,而HWPFDocument是要依附于一个doc文件的。
在实际开发中,我们在生成word文件的时候都是生成某一类文件,该类文件的格式是固定的,只是某些字段不一样罢了。所以在实际应用中,我们大可不必将整个word文件的内容都通过HWPFDocument生成。而是先在磁盘上新建一个word文档,其内容就是我们需要生成的word文件的内容,然后把里面一些属于变量的内容使用类似于“${paramName}”这样的方式代替。这样我们在基于某些信息生成word文件的时候,只需要获取基于该word文件的HWPFDocument,然后调用Range的replaceText()方法把对应的变量替换为对应的值即可,之后再把当前的HWPFDocument写入到新的输出流中。
public class HwpfWriteTest { public void testWrite() throws Exception { String templatePath = "C:\\User\\Desktop\\template.doc"; InputStream is = new FileInputStream(templatePath); HWPFDocument doc = new HWPFDocument(is); Range range = doc.getRange(); //将文档中的"${helloword}"替换为"Hi" range.replaceText("${helloword}", "Hi"); OutputStream os = new FileOutputStream("C:\\User\\Desktop\\write.doc"); //把doc输出到输出流中 doc.write(os); this.closeStream(os); this.closeStream(is); } /** * 关闭输入流 * @param is */ private void closeStream(InputStream is) { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 关闭输出流 * @param os */ private void closeStream(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } }