Skip to content

Commit

Permalink
Bug 68183: SXSSFWorkbook should dispose of temporary files when close…
Browse files Browse the repository at this point in the history
…() is called

This way consumers can use the workbook in a try-with-resources statement and
the temp files will always be cleaned up without having to remember to explicitly
call SXSSFWorkbook#dispose().
  • Loading branch information
InfiniteLoop90 committed Apr 26, 2024
1 parent 3800aa5 commit f9eb5c6
Showing 1 changed file with 15 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ Licensed to the Apache Software Foundation (ASF) under one or more
*
* Carefully review your memory budget and compatibility needs before deciding
* whether to enable shared strings or not.
*
* <p>To release resources used by this workbook (including disposing of the temporary
* files backing this workbook on disk) {@link #close} should be called directly or a
* try-with-resources statement should be used.</p>
*/
public class SXSSFWorkbook implements Workbook {
/**
Expand Down Expand Up @@ -904,8 +908,9 @@ public CellStyle getCellStyleAt(int idx) {
}

/**
* Closes the underlying {@link XSSFWorkbook} and {@link OPCPackage}
* on which this Workbook is based, if any.
* Disposes of the temporary files backing this workbook on disk and closes the
* underlying {@link XSSFWorkbook} and {@link OPCPackage} on which this Workbook is
* based, if any.
*
* <p>Once this has been called, no further
* operations, updates or reads should be performed on the
Expand All @@ -923,6 +928,8 @@ public void close() throws IOException {
}
}

// Dispose of any temporary files backing this workbook on disk
dispose();

// Tell the base workbook to close, does nothing if
// it's a newly created one
Expand Down Expand Up @@ -1001,8 +1008,14 @@ protected void flushSheets() throws IOException {
/**
* Dispose of temporary files backing this workbook on disk.
* Calling this method will render the workbook unusable.
*
* <p>The {@link #close()} method will also dispose of the temporary files so
* explicitly calling this method is unnecessary if the workbook will get closed.</p>
*
* @return true if all temporary files were deleted successfully.
* @deprecated use {@link #close()} to close the workbook instead which also disposes of the temporary files
*/
@Deprecated
public boolean dispose() {
boolean success = true;
for (SXSSFSheet sheet : _sxFromXHash.keySet()) {
Expand Down

0 comments on commit f9eb5c6

Please sign in to comment.