]> source.dussan.org Git - poi.git/commitdiff
bug 57919: add functions to write and close a POIDocument, guaranteeing closure of...
authorJaven O'Neal <onealj@apache.org>
Tue, 20 Jun 2017 07:28:14 +0000 (07:28 +0000)
committerJaven O'Neal <onealj@apache.org>
Tue, 20 Jun 2017 07:28:14 +0000 (07:28 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1799308 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/util/IOUtils.java

index a15c3b2b20ecf3344d362b97c7f9222cfebd9897..1f4429f58f5e11ef9bb1c11e19b4f60a9f13b4a8 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.util;
 
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -29,6 +30,7 @@ import java.util.zip.CRC32;
 import java.util.zip.Checksum;
 
 import org.apache.poi.EmptyFileException;
+import org.apache.poi.POIDocument;
 
 public final class IOUtils {
     private static final POILogger logger = POILogFactory.getLogger( IOUtils.class );
@@ -187,6 +189,82 @@ public final class IOUtils {
             }
         }
     }
+    
+    /**
+     * Write a POI Document ({@link org.apache.poi.ss.usermodel.Workbook}, {@link org.apache.poi.sl.usermodel.SlideShow}, etc) to an output stream and close the output stream.
+     * This will attempt to close the output stream at the end even if there was a problem writing the document to the stream.
+     * 
+     * If you are using Java 7 or higher, you may prefer to use a try-with-resources statement instead.
+     * This function exists for Java 6 code.
+     *
+     * @param doc  a writeable document to write to the output stream
+     * @param out  the output stream that the document is written to
+     * @throws IOException 
+     */
+    public static void write(POIDocument doc, OutputStream out) throws IOException {
+        try {
+            doc.write(out);
+        } finally {
+            closeQuietly(out);
+        }
+    }
+    
+    /**
+     * Write a POI Document ({@link org.apache.poi.ss.usermodel.Workbook}, {@link org.apache.poi.sl.usermodel.SlideShow}, etc) to an output stream and close the output stream.
+     * This will attempt to close the output stream at the end even if there was a problem writing the document to the stream.
+     * This will also attempt to close the document, even if an error occurred while writing the document or closing the output stream.
+     * 
+     * If you are using Java 7 or higher, you may prefer to use a try-with-resources statement instead.
+     * This function exists for Java 6 code.
+     *
+     * @param doc  a writeable and closeable document to write to the output stream, then close
+     * @param out  the output stream that the document is written to
+     * @throws IOException 
+     */
+    public static void writeAndClose(POIDocument doc, OutputStream out) throws IOException {
+        try {
+            write(doc, out);
+        } finally {
+            closeQuietly(doc);
+        }
+    }
+    
+    /**
+     * Like {@link #writeAndClose(POIDocument, OutputStream)}, but for writing to a File instead of an OutputStream.
+     * This will attempt to close the document, even if an error occurred while writing the document.
+     * 
+     * If you are using Java 7 or higher, you may prefer to use a try-with-resources statement instead.
+     * This function exists for Java 6 code.
+     *
+     * @param doc  a writeable and closeable document to write to the output file, then close
+     * @param out  the output file that the document is written to
+     * @throws IOException 
+     */
+    public static void writeAndClose(POIDocument doc, File out) throws IOException {
+        try {
+            doc.write(out);
+        } finally {
+            closeQuietly(doc);
+        }
+    }
+    
+    /**
+     * Like {@link #write(POIDocument, File)}, but for writing a POI Document in place (to the same file that it was opened from).
+     * This will attempt to close the document, even if an error occurred while writing the document.
+     * 
+     * If you are using Java 7 or higher, you may prefer to use a try-with-resources statement instead.
+     * This function exists for Java 6 code.
+     *
+     * @param doc  a writeable document to write in-place
+     * @throws IOException 
+     */
+    public static void writeAndClose(POIDocument doc) throws IOException {
+        try {
+            doc.write();
+        } finally {
+            closeQuietly(doc);
+        }
+    }
 
     /**
      * Copies all the data from the given InputStream to the OutputStream. It