Annuler la création d'une archive ZIP
Il peut arriver que vous souhaitiez annuler la création d’une archive ZIP pour diverses raisons. Cela prend trop de temps ou vous n’avez pas besoin de certaines entrées.
Vue d’ensemble
Il existe une classe
EventsBag qui contient les événements liés à l’archivage. Elle supporte maintenant un événement - EntryCompressed
(
getEntryCompressed/
setEntryCompressed). Il se déclenche lorsqu’une entrée d’archive a été compressée, et il peut être annulé.
Annulation de la création d’une archive longue
Supposons que vous souhaitiez que votre archive ZIP soit composée en une minute environ. Après qu’une entrée a été compressée, vérifiez le temps écoulé depuis le début de la compression, et si cela a pris plus d’une minute, annulez le processus. L’archive résultante contiendra des entrées déjà compressées, y compris celle qui a déclenché l’événement.
1try (Archive archive = new Archive()) {
2 archive.createEntries("D:\NBigFolder") ;
3 EventsBag eb = nouveau 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}
Annulation après une certaine entrée
Si vous voulez annuler après qu’une entrée particulière ait été compressée, utilisez l’extrait suivant :
1try (Archive archive = new Archive()) {
2 archive.createEntries("D:\NBigFolder") ;
3 EventsBag eb = nouveau 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("output.zip", options) ;
12}