Erstellung eines ZIP-Archivs abbrechen
Es kann vorkommen, dass Sie die Erstellung von ZIP-Archiven aus verschiedenen Gründen abbrechen möchten. Es kann einfach zu lange dauern oder Sie brauchen einige Einträge dort gar nicht.
Übersicht
Es gibt eine
EventsBag Klasse, die Container für archivbezogene Ereignisse sind. Jetzt unterstützt sie ein Ereignis - EntryCompressed
(
getEntryCompressed/
setEntryCompressed). Es wird ausgelöst, nachdem ein Archiveintrag komprimiert wurde, und es kann abgebrochen werden.
Abbruch der Erstellung eines langen Archivs
Angenommen, Sie möchten, dass Ihr ZIP-Archiv in etwa einer Minute erstellt wird. Nachdem ein Eintrag komprimiert wurde, überprüfen Sie die Zeit, die seit Beginn der Komprimierung verstrichen ist, und brechen Sie den Vorgang ab, wenn er länger als eine Minute gedauert hat. Das Ergebnisarchiv würde bereits komprimierte Einträge enthalten, einschließlich des Eintrags, der das Ereignis ausgelöst hat.
1try (Archiv 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}
Abbruch nach bestimmter Eingabe
Wenn Sie den Vorgang abbrechen möchten, nachdem ein bestimmter Eintrag komprimiert wurde, verwenden Sie das folgende Snippet:
1try (Archiv archive = new Archive()) {
2 archive.createEntries("D:\\BigFolder");
3 EventsBag eb = new EventsBag();
4 eb.setEntryCompressed((Absender, 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}