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}