Browse Source

Bugzilla 52062: ensure that temporary files in SXSSF are deleted

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1198693 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_8_BETA5
Yegor Kozlov 12 years ago
parent
commit
8a841f2380

+ 1
- 0
src/documentation/content/xdocs/status.xml View File

@@ -34,6 +34,7 @@

<changes>
<release version="3.8-beta5" date="2011-??-??">
<action dev="poi-developers" type="fix">52062 - ensure that temporary files in SXSSF are deleted</action>
<action dev="poi-developers" type="fix">50936 - Exception parsing MS Word 8.0 file (as duplicate of 47958)</action>
<action dev="poi-developers" type="fix">47958 - ArrayIndexOutOfBoundsException from PicturesTable.getAllPictures() during Escher tree walk</action>
<action dev="poi-developers" type="fix">51944 - PAPFormattedDiskPage.getPAPX - IndexOutOfBounds</action>

+ 1
- 1
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java View File

@@ -1284,7 +1284,7 @@ public class SXSSFSheet implements Sheet, Cloneable

public SheetDataWriter() throws IOException
{
_fd = File.createTempFile("poi-sxxsf-sheet", ".xml");
_fd = File.createTempFile("poi-sxssf-sheet", ".xml");
_fd.deleteOnExit();
_out = new BufferedWriter(new FileWriter(_fd));
}

+ 37
- 19
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java View File

@@ -186,30 +186,48 @@ public class SXSSFWorkbook implements Workbook
private void injectData(File zipfile, OutputStream out) throws IOException
{
ZipFile zip = new ZipFile(zipfile);

ZipOutputStream zos = new ZipOutputStream(out);

@SuppressWarnings("unchecked")
Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
while (en.hasMoreElements())
try
{
ZipEntry ze = en.nextElement();
zos.putNextEntry(new ZipEntry(ze.getName()));
InputStream is = zip.getInputStream(ze);
XSSFSheet xSheet=getSheetFromZipEntryName(ze.getName());
if(xSheet!=null)
ZipOutputStream zos = new ZipOutputStream(out);
try
{
SXSSFSheet sxSheet=getSXSSFSheet(xSheet);
copyStreamAndInjectWorksheet(is,zos,sxSheet.getWorksheetXMLInputStream());
@SuppressWarnings("unchecked")
Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
while (en.hasMoreElements())
{
ZipEntry ze = en.nextElement();
zos.putNextEntry(new ZipEntry(ze.getName()));
InputStream is = zip.getInputStream(ze);
XSSFSheet xSheet=getSheetFromZipEntryName(ze.getName());
if(xSheet!=null)
{
SXSSFSheet sxSheet=getSXSSFSheet(xSheet);
InputStream xis = sxSheet.getWorksheetXMLInputStream();
try
{
copyStreamAndInjectWorksheet(is,zos,xis);
}
finally
{
xis.close();
}
}
else
{
copyStream(is, zos);
}
is.close();
}
}
else
finally
{
copyStream(is, zos);
zos.close();
}
is.close();
}

zos.close();
finally
{
zip.close();
}
}
private static void copyStream(InputStream in, OutputStream out) throws IOException {
byte[] chunk = new byte[1024];
@@ -649,7 +667,7 @@ public class SXSSFWorkbook implements Workbook
}
//Save the template
File tmplFile = File.createTempFile("poi-sxxsf-template", ".xlsx");
File tmplFile = File.createTempFile("poi-sxssf-template", ".xlsx");
tmplFile.deleteOnExit();
FileOutputStream os = new FileOutputStream(tmplFile);
_wb.write(os);

Loading…
Cancel
Save