2011-09-14 13 views
8

Usando la siguiente documentación: http://poi.apache.org/spreadsheet/how-to.html#sxssfApache POI - SXSSF: ¿a dónde va a tirar las filas que no están en la ventana antes de enviarlas al archivo?

De acuerdo a este sitio:

SXSSF (paquete: org.apache.poi.xssf.streaming) es una extensión de streaming compatible-API de XSSF a utilizar cuando se deben producir hojas de cálculo muy grandes y el espacio de almacenamiento es limitado. SXSSF logra su huella de memoria baja al limitar el acceso a las filas que están dentro de una ventana deslizante, mientras que XSSF da acceso a todas las filas del documento. Las filas antiguas que ya no se encuentran en la ventana se vuelven inaccesibles, ya que se escriben en el disco.

Sin embargo, en el ejemplo proporcionado, la descarga ocurre antes de que el libro tenga la ubicación del archivo donde escribir el archivo.

public static void main(String[] args) throws Throwable { 
    Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk 
    Sheet sh = wb.createSheet(); 
    for(int rownum = 0; rownum < 1000; rownum++){ 
     Row row = sh.createRow(rownum); 
     for(int cellnum = 0; cellnum < 10; cellnum++){ 
      Cell cell = row.createCell(cellnum); 
      String address = new CellReference(cell).formatAsString(); 
      cell.setCellValue(address); 
     } 

    } 

    // Rows with rownum < 900 are flushed and not accessible 
    for(int rownum = 0; rownum < 900; rownum++){ 
     Assert.assertNull(sh.getRow(rownum)); 
    } 

    // ther last 100 rows are still in memory 
    for(int rownum = 900; rownum < 1000; rownum++){ 
     Assert.assertNotNull(sh.getRow(rownum)); 
    } 

    FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx"); 
    wb.write(out); 
    out.close(); 
} 

Así que esto plantea la pregunta, ¿en qué parte del sistema de archivos está almacenando los datos? ¿Simplemente está creando un archivo temporal en el directorio temporal predeterminado? ¿Es esto seguro para todas/la mayoría de las implementaciones?

Gracias

Respuesta

9

La clase que hace el tampón se SheetDataWriter en org.apache.poi.xssf.streaming.SXSSFSheet

La línea mágica es probable que estés interesado es:

_fd = File.createTempFile("poi-sxxsf-sheet", ".xml"); 

En términos de seguridad es que, probablemente, pero no sin duda ... Es probable que valga la pena abrir un error en el poi bugzilla, y solicitar que se cambie a usar org.apache.poi.util.TempFile, que permite un poco más de control. Sin embargo, en general, siempre que especifique una propiedad válida para java.io.tmpdir (o el valor predeterminado es razonable para usted) debería estar bien

+0

¡Genial! Gracias .. –

+0

Gracias por su respuesta. Cuando se borra el archivo temporal? ¿se eliminará en la finalización del programa? ¿cómo podemos eliminarlo manualmente? – user2625094

+0

Clase SXSSF Eliminación de libros de trabajo(): elimine los archivos temporales que respaldan este libro de trabajo en el disco. –

Cuestiones relacionadas