aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaven O'Neal <onealj@apache.org>2017-06-20 08:13:58 +0000
committerJaven O'Neal <onealj@apache.org>2017-06-20 08:13:58 +0000
commit8358a80a1420e25654eb31e311b419cb7e8eb5dd (patch)
tree09a099502be3cf86a9c48702a55d3720d45122aa
parentb761cbb7b94a6f93e6d08255150678c955437300 (diff)
downloadpoi-8358a80a1420e25654eb31e311b419cb7e8eb5dd.tar.gz
poi-8358a80a1420e25654eb31e311b419cb7e8eb5dd.zip
bug 57919: close opened resources
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1799316 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/poi/util/IOUtils.java19
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java25
2 files changed, 36 insertions, 8 deletions
diff --git a/src/java/org/apache/poi/util/IOUtils.java b/src/java/org/apache/poi/util/IOUtils.java
index 1f4429f58f..3af010b7b5 100644
--- a/src/java/org/apache/poi/util/IOUtils.java
+++ b/src/java/org/apache/poi/util/IOUtils.java
@@ -31,6 +31,7 @@ import java.util.zip.Checksum;
import org.apache.poi.EmptyFileException;
import org.apache.poi.POIDocument;
+import org.apache.poi.ss.usermodel.Workbook;
public final class IOUtils {
private static final POILogger logger = POILogFactory.getLogger( IOUtils.class );
@@ -209,6 +210,14 @@ public final class IOUtils {
}
}
+ public static void write(Workbook 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.
@@ -265,6 +274,16 @@ public final class IOUtils {
closeQuietly(doc);
}
}
+
+ // Since the Workbook interface doesn't derive from POIDocument
+ // We'll likely need one of these for each document container interface
+ public static void writeAndClose(Workbook doc, OutputStream out) throws IOException {
+ try {
+ doc.write(out);
+ } finally {
+ closeQuietly(doc);
+ }
+ }
/**
* Copies all the data from the given InputStream to the OutputStream. It
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java b/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java
index 68188cb220..b1a0c40fc7 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java
@@ -24,11 +24,11 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.util.IOUtils;
import org.apache.poi.util.TempFile;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -39,7 +39,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
*/
public class XSSFTestDataSamples {
/**
- * Used by {@link writeOutAndReadBack(R wb, String testName)}. If a
+ * Used by {@link #writeOutAndReadBack(Workbook, String)}. If a
* value is set for this in the System Properties, the xlsx file
* will be written out to that directory.
*/
@@ -74,6 +74,21 @@ public class XSSFTestDataSamples {
* @throws IOException
*/
public static <R extends Workbook> File writeOut(R wb, String testName) throws IOException {
+ final File file = getOutputFile(testName);
+ writeOut(wb, file);
+ return file;
+ }
+
+ private static <R extends Workbook> void writeOut(R wb, File file) throws IOException {
+ IOUtils.write(wb, new FileOutputStream(file));
+ }
+
+ // Anticipates the location of where a workbook will be written to
+ // Note that if TEST_OUTPUT_DIR is not set, this will create temporary files
+ // with unique names. Subsequent calls with the same argument may return a different file.
+ // Gets a test data sample file, deleting the file if it exists.
+ // This is used in preparation for writing a workbook out to the returned output file.
+ private static File getOutputFile(String testName) throws IOException {
final String testOutputDir = System.getProperty(TEST_OUTPUT_DIR);
final File file;
if (testOutputDir != null) {
@@ -85,12 +100,6 @@ public class XSSFTestDataSamples {
if (file.exists()) {
file.delete();
}
- final OutputStream out = new FileOutputStream(file);
- try {
- wb.write(out);
- } finally {
- out.close();
- }
return file;
}