Apache POI: SXSSFWorkbook.dispose () existiert nicht

8

Ich verwende die POI-API von Apache, um XLSX-Dateien zu schreiben. Da ich große Dateien schreiben muss, verwende ich die Streaming API (SXSSF). Um dies zu tun, folge ich diesem Leitfaden. Beachten Sie, dass am Ende des Beispiels ein Aufruf von

erfolgt %Vor%

Diese wb-Instanz verweist auf eine SXSSFWorkbook-Instanz. Ich benutze das gleiche in meinem Code, aber es beschwert sich über die dispose-Methode nicht vorhanden. Ich habe den Quellcode heruntergeladen und die Methode ist nicht da. Wenn wir jedoch zu ihrem SVN gehen und den Klassencode überprüfen, können wir die Methode dort sehen:

Ссылка

Ich habe bereits versucht, ihren Code neu zu kompilieren, aber ich bekomme viele Fehler ...

    
Miguel Ribeiro 03.10.2012, 14:45
quelle

2 Antworten

7

Ab dem 3.12.2012 ist POI 3.9 als stabile Version verfügbar. Die Methode dispose() ist in verfügbar SXSSFWorkbook in dieser Version.

( Das war natürlich nicht der Fall, als die Frage gestellt wurde. )

    
MaxH 08.05.2013, 07:44
quelle
12

Der Apache POI 3.8 (zuletzt stabil zu der Zeit) erstellt eine temporäre XML-Datei für jedes Blatt (bei Verwendung von SXSSF), bietet jedoch keine Option zum Löschen dieser Dateien. Diese Tatsache macht diese API nicht gut zu verwenden, denn wenn ich 600MB Daten exportiere, dann habe ich 2 Dateien mit 600MB und einer von ihnen wird im temporären Ordner sein, bis er gelöscht wird.

Wenn wir in den Code eintauchen, sehen wir, dass die Klasse SXSSFSheet eine Instanz von SheetDataWriter hat. Diese letzte Klasse ist verantwortlich für das Schreiben und Verwalten der temporären Datei, die durch die File -Instanz repräsentiert wird. Wenn Sie auf dieses Objekt zugreifen, können Sie die Datei löschen. All diese Instanzen sind privat, daher können Sie theoretisch nicht darauf zugreifen. Durch Reflektion können wir jedoch auf die File -Instanz zugreifen, um diese nützlichen, aber lästigen Dateien zu löschen!

Die folgenden Methoden ermöglichen dies. Durch den Aufruf von deleteSXSSFTempFiles werden alle temporären Dateien dieser Arbeitsmappe gelöscht.

%Vor%     
Miguel Ribeiro 04.10.2012 10:05
quelle