Cancelar la creación de un archivo ZIP
Puede ocurrir que desee cancelar la creación de un archivo ZIP por varias razones. Simplemente puede tomar demasiado tiempo o que en realidad no necesita algunas entradas allí.
**Descripción general
Existe una clase
EventsBag que es contenedor de eventos relacionados con el archivo. Ahora soporta un evento - EntryCompressed
(
getEntryCompressed/
setEntryCompressed). Se activa cuando se comprime una entrada del archivo y se puede cancelar.
Cancelación de la creación de un archivo largo
Digamos que quieres que tu archivo ZIP se componga en aproximadamente un minuto. Después de comprimir alguna entrada, comprueba el tiempo transcurrido desde el inicio de la compresión y, si ha tardado más de un minuto, cancela el proceso. El archivo resultante tendría ya entradas comprimidas incluyendo la que provocó el evento.
1try (Archive archive = new Archive()) {
2 archive.createEntries("D:\\\BigFolder");
3 EventsBag eb = new EventsBag();
4
5 Instant starts = Instant.now();
6
7 eb.setEntryCompressed((sender, args) -> {
8 if (starts.plusSeconds(60).isBefore(Instant.now()))
9 args.setCancel(true);
10 });
11 ArchiveSaveOptions options = new ArchiveSaveOptions();
12 options.setEventsBag(eb);
13 archive.save("output.zip", options);
14}
Cancelación tras cierta entrada
Si desea cancelar después de que se haya comprimido una entrada determinada, utilice el siguiente fragmento:
1try (Archive archive = new Archive()) {
2 archive.createEntries("D:\\\BigFolder");
3 EventsBag eb = new EventsBag();
4 eb.setEntryCompressed((sender, args) -> {
5 System.out.println(args.getEntry().getName());
6 if (args.getEntry().getName().equals("BigFolder\last.bin"))
7 args.setCancel(true);
8 });
9 ArchiveSaveOptions options = new ArchiveSaveOptions();
10 options.setEventsBag(eb);
11 archive.save("salida.zip", opciones);
12}