Komprimierungsfortschritt melden
Progress Event Handler
Der Komprimierungsprozess kann sehr lange dauern, besonders wenn die Datenmenge sehr groß ist. Für Zip-Archive gibt es ein CompressionProgressed
-Ereignis (
getCompressionProgressed/
setCompressionProgressed), um auf dem Laufenden zu bleiben. Dieses Ereignis stützt sich auf
ProgressEventArgs, das die Anzahl der bisher verarbeiteten Bytes enthält.
So können wir dieses Ereignis mit
lambda-Ausdruck abonnieren:
1entry.setCompressionProgressed((Absender, args) -> {
2 System.out.println(args.getProceededBytes() + " bytes compressed");
3});
Prozentuale Anzeige des Komprimierungsfortschritts
Jedes Mal, wenn das Ereignis CompressionProgressed
ausgelöst wird, teilen wir die Zahl ProceededBytes
durch die Länge der Originaldatei. So finden wir den Anteil der komprimierten Bytes im Moment. Hier ist das vollständige Beispiel.
1Datei source = new Datei("huge.bin");
2try (Archiv archive = new Archive()) {
3 ArchiveEntry entry = archive.createEntry("huge.bin", source);
4 final int[] percentReady = new int[1];
5 entry.setCompressionProgressed((Absender, args) -> {
6 int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
7 if (percent > percentReady[0])
8 {
9 System.out.println(percent + "% komprimiert");
10 percentReady[0] = percent;
11 }
12 });
13 archive.save("output.zip");
14}
Bericht über den 7z-Fortschrittsgrad
Ein ähnlicher Ansatz gilt für 7z-Archive. Sein Eintrag hat eigene Methoden zum Abrufen und Setzen des Ereignisses ( getCompressionProgressed/ setCompressionProgressed)
1File source = new File("huge.bin");
2try (SevenZipArchive archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings()))) {
3 SevenZipArchiveEntry entry = archive.createEntry("huge.bin", Quelle);
4 final int[] percentReady = new int[1];
5 entry.setCompressionProgressed((Absender, args) -> {
6 // Absender ist SevenZipArchiveEntry
7 int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
8 if (percent > percentReady[0])
9 {
10 System.out.println(percent + "% komprimiert");
11 percentReady[0] = percent;
12 }
13 });
14 archive.save("output.zip");
15}