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 ...
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.
Tags und Links excel apache-poi streamwriter streaming