erik992 ha scritto:
Durante la creazione di un file Excel vorrei controllare se ogni 100 righe di scrittura ho superato una certa dimensione del file. L’obiettivo è quello di, nel caso interrompere la creazione, senza alterare le performance e consumare spazio del disco su cui sta lavorando, se ad esempio i file generati sono già troppo grandi. Sto usando l’Interfaccia pubblica Workbook. Ovviamente il mio applicativo deve interrompere il processo nel caso il file è già troppo grande durante la sua creazione parziale, altrimenti ritornare il file generato.
Non l'hai precisato ma si presume che stai usando la ben nota Apache POI. La questione è che Apache POI tiene tutto il workbook in memoria e poi solo alla fine lo si scrive da qualche parte (es. file) con il suo
write(OutputStream) (o
write(File) se si usa HSSFWorkbook). Quindi NON è affatto facile sapere o avere una stima di quella che poi sarebbe la dimensione del file finale.
Innanzitutto si può vedere se la POI stessa può fornire una indicazione/stima. Vedo ad esempio che la HSSFWorkbook (quindi non la interfaccia Workbook) ha un
byte[] getBytes() pertanto si può avere una stima, al costo di occupare memoria per l'array.
Un'altra possibilità che non occupa memoria (ma un po' di tempo, invece) è implementare un OutputStream "nullo" cioè che non scrive nulla da alcuna parte ma che conta (in modo furbo) i byte che vengono scritti, così da avere la dimensione precisa. Chiaramente non fare questo solo ogni 100 righe ma magari ogni 1000 o 10000.