bug 57919: close opened resources
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1799316 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
46b5d839c3
commit
171692edf2
@ -31,6 +31,7 @@ import java.util.zip.Checksum;
|
|||||||
|
|
||||||
import org.apache.poi.EmptyFileException;
|
import org.apache.poi.EmptyFileException;
|
||||||
import org.apache.poi.POIDocument;
|
import org.apache.poi.POIDocument;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
|
||||||
public final class IOUtils {
|
public final class IOUtils {
|
||||||
private static final POILogger logger = POILogFactory.getLogger( IOUtils.class );
|
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.
|
* 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 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);
|
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
|
* Copies all the data from the given InputStream to the OutputStream. It
|
||||||
|
@ -24,11 +24,11 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.TempFile;
|
import org.apache.poi.util.TempFile;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|||||||
*/
|
*/
|
||||||
public class XSSFTestDataSamples {
|
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
|
* value is set for this in the System Properties, the xlsx file
|
||||||
* will be written out to that directory.
|
* will be written out to that directory.
|
||||||
*/
|
*/
|
||||||
@ -74,6 +74,21 @@ public class XSSFTestDataSamples {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public static <R extends Workbook> File writeOut(R wb, String testName) 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 String testOutputDir = System.getProperty(TEST_OUTPUT_DIR);
|
||||||
final File file;
|
final File file;
|
||||||
if (testOutputDir != null) {
|
if (testOutputDir != null) {
|
||||||
@ -85,12 +100,6 @@ public class XSSFTestDataSamples {
|
|||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
file.delete();
|
file.delete();
|
||||||
}
|
}
|
||||||
final OutputStream out = new FileOutputStream(file);
|
|
||||||
try {
|
|
||||||
wb.write(out);
|
|
||||||
} finally {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user