|
|
| |
| |
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)
|
|
|
 |
|
|
|
|
|
|
09.10.05, 14:34
|
#1 (permalink)
|
|
Mitglied Gold
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
|
Archiv entpacken mit Prozentanzeige
Hallo, hab mal ne kleine Frage:
Ich benutze folgenden Code um ein zip-Archiv zu entpacken. Jetzt will ich noch eine Anzeige machen, die zeigt wieviel Prozent schon entpackt sind, wie geht das am besten?
|
Code:
|
package de.tutorials;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class ZipArchiveExtractor {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
new ZipArchiveExtractor().extractArchive(new File(
"c:/tmp/xdoclet-bin-1.2.3.zip"), new File("c:/tmp/x"));
}
public void extractArchive(File archive, File destDir) throws Exception {
if (!destDir.exists()) {
destDir.mkdir();
}
ZipFile zipFile = new ZipFile(archive);
Enumeration entries = zipFile.entries();
byte[] buffer = new byte[16384];
int len;
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String entryFileName = entry.getName();
if (entry.isDirectory()) {
File dir = new File(destDir, entryFileName);
// System.out.println(dir);
if (!dir.exists()) {
dir.mkdir();
}
} else {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(destDir, entryFileName)));
BufferedInputStream bis = new BufferedInputStream(zipFile
.getInputStream(entry));
while ((len = bis.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
}
}
}
}
|
|
10.10.05, 09:29
|
#2 (permalink)
|
|
Mitglied Platin
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
Das ist doch schon eine gute Grundlage. Für die %-Anzeige brauchst Du allerdings die Gesamtzahl der Dateien. Dumm, daß Du eine Enumeration bekommst. Du hast aber noch die Methode "size()" - und schon hast Du die Lösung.
__________________
CU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
|
10.10.05, 11:20
|
#3 (permalink)
|
|
Mitglied Brokat
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
|
Re: Archiv entpacken mit Prozentanzeige
Was soll das denn? Der Thread läuft ja wohl schon!
hier
__________________
Ich hab keine Ahnung.
Aber davon jede Menge.
|
10.10.05, 13:44
|
#4 (permalink)
|
|
Mitglied Gold
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
Yo, den Tread gabs schomal, aber hat sich irgendwie keiner dafür intressiert, deshalb hab ich halt nen neuen gmacht. Ich will schließlich au irgendwann ne Antwort griegn.
Jetzt zur Antwort:
Ich soll also mit Size() die Anzahl der Dateien im Archiv griegn, un dann Bei jedem Durchlauf der while-Schleife die neue Prozent-Zahl berrechnen? Müsste eigentlich funktionieren, mal probieren.
thx
|
10.10.05, 14:47
|
#5 (permalink)
|
|
Mitglied Brokat
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
|
Re: Archiv entpacken mit Prozentanzeige
Na denn schau mal.
Also es lässt sich so machen...
Aber Fallbeispiel:
5 Verzeichnisse
Eins hat 31 Unterverzeichnisse und die anderen zwischen 0-5.
Dann tut sich, wenn er das große Verzeichnis bearbeitet erstmal
lange nix und die anderen gehen recht fix.
Das ist dem Hochzählmechanismuss aber dann egal.
Ich hoffe du verstehst 
__________________
Ich hab keine Ahnung.
Aber davon jede Menge.
|
10.10.05, 15:10
|
#6 (permalink)
|
|
Mitglied Gold
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
Ich habs jetzt mit folgendem Code probiert, funktioniert aber nicht richtig. % zählen zu langsam hoch und bei 36 % ist das Archiv fertig entpackt
Mein Code:
|
Code:
|
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.sound.sampled.*;
import java.io.*;
import java.util.*;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
int fileNumber; //Dateien im Archiv (wird durch size() geliefert)
int copiedFiles; //bereits entpackte Dateien
int percentage; //Prozent
public void extractArchive(File archive, File destDir) throws Exception {
jLabel15.setText("Vorbereitung der Datenübertragung");
if (!destDir.exists()) {
destDir.mkdir();
}
ZipFile zipFile = new ZipFile(archive);
Enumeration entries = zipFile.entries();
byte[] buffer = new byte[16384];
int len;
fileNumber = zipFile.size();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String entryFileName = entry.getName();
if (entry.isDirectory()) {
File dir = new File(destDir, entryFileName);
jLabel15.setText("Kopiere Dateien..." + dir.getName());
copiedFiles++;
percentage = 100 * copiedFiles / fileNumber;
this.setTitle("Sea Wars - " + percentage + "%");
if (!dir.exists()) {
dir.mkdir();
}
} else {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(destDir, entryFileName)));
BufferedInputStream bis = new BufferedInputStream(zipFile
.getInputStream(entry));
while ((len = bis.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
}
}
}
|
Was stimmt da nicht?
|
10.10.05, 15:29
|
#7 (permalink)
|
|
Mitglied Brokat
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
|
Re: Archiv entpacken mit Prozentanzeige
Probiers mal so:
|
Code:
|
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.sound.sampled.*;
import java.io.*;
import java.util.*;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
int ProGesamt; // Bisher geschaffte Prozentzahl
int ProStep; // In dem Intervall wird hochgezählt
public void extractArchive(File archive, File destDir) throws Exception {
jLabel15.setText("Vorbereitung der Datenübertragung");
if (!destDir.exists()) {
destDir.mkdir();
}
ZipFile zipFile = new ZipFile(archive);
Enumeration entries = zipFile.entries();
byte[] buffer = new byte[16384];
int len;
ProStep = 100 / zipFile.size(); //Hier wird das Intervall ausgerechnet
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String entryFileName = entry.getName();
if (entry.isDirectory()) {
File dir = new File(destDir, entryFileName);
jLabel15.setText("Kopiere Dateien..." + dir.getName());
ProGes=ProGes+ProStep;
this.setTitle("Sea Wars - " + ProGes + "%");
if (!dir.exists()) {
dir.mkdir();
}
} else {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(destDir, entryFileName)));
BufferedInputStream bis = new BufferedInputStream(zipFile
.getInputStream(entry));
while ((len = bis.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
}
//Hier nochmal deine Anzeige auf 100% setzen
}
}
|
Warnung: habs nur schnell im Edit geschrieben
So müsste es gehen.
__________________
Ich hab keine Ahnung.
Aber davon jede Menge.
|
10.10.05, 19:35
|
#8 (permalink)
|
|
Mitglied Gold
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
Des funktioniert net.
1. ergibt 100/zipFile.size() einen Wert unter 0.5, weil Integer aber nur ganze Zahlen kennt, wird auf null abgerundet. Also hab ich statt int double benutzt
2. Ich bekomm für zipFile.size() mit Integer 555555555 als Wert, mit Double 555.0, des kann aber net sein. Warum Was soll des
|
11.10.05, 08:29
|
#9 (permalink)
|
|
Mitglied Brokat
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
|
Re: Archiv entpacken mit Prozentanzeige
Sorry, mein Fehler.
Das muss natürlich so sein:
|
Code:
|
import java.lang.Integer;
...
double ProGesamt;
double ProStep;
...
//Die Berechnung des Intervalls
ProStep=100 / doubleValue(ZipFile.size());
|
PS: Wenn du mir das Ergebnis gibst, wäre es auch gut zu wissen wie viele
Files es waren.
Ich hoffe es geht jetzt 
__________________
Ich hab keine Ahnung.
Aber davon jede Menge.
|
11.10.05, 08:30
|
#10 (permalink)
|
Registriert seit: Jun 2002
Ort: Saarbrücken (Saarland)
Beiträge: 9.165
|
Re: Archiv entpacken mit Prozentanzeige
Hallo!
An deiner Stelle wuerde ich mir irgendwoher die Zip Dateiformat Spezifikation besorgen und nachschauen, ob es irgendwo ein Header-Feld gibt, indem die urspruengliche Gesamtgroesse aller Dateien drinnen steht. Wenn du diese Information hast brauchst du eigentlich nur die bytes zu zaehlen, welche du auf die Platte oder wohin auch immer rausschreibst...
Gruss Tom
|
11.10.05, 08:44
|
#11 (permalink)
|
|
Mitglied Brokat
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
|
Re: Archiv entpacken mit Prozentanzeige
Das is ne gute Idee.
Wenn das geht, ist es die bessere (genauere) Lösung
__________________
Ich hab keine Ahnung.
Aber davon jede Menge.
|
11.10.05, 10:44
|
#12 (permalink)
|
|
Mitglied Platin
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
Die unkomprimierte Größe bekommst Du mit myZipEntry.getSize() heraus. Addiere also vor dem Entpacken alle diese Größen (= 100%) und errechne somit je entpackter Datei die Fortschrittsanzeige.
__________________
CU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
|
11.10.05, 12:47
|
#13 (permalink)
|
Registriert seit: Jun 2002
Ort: Saarbrücken (Saarland)
Beiträge: 9.165
|
Re: Archiv entpacken mit Prozentanzeige
Hallo!
Das waere IMHO keine wirklich gute Idee.... da waeren ja dann 2 Durchgaenge notwendig. 1) Groessenermittlung
2) Eigentlicher (erneuter) Entpackvorgang mit Darstellung des Fortschritts...
... bei nur einem Durchgang nuetzt dir diese Art der groessen Bestimmung nicht viel, da du die letzendliche Information um einen Absoluten %-Wert angeben zu koennen erst nach der letzten Datei hast...
Gruss Tom
|
11.10.05, 13:02
|
#14 (permalink)
|
|
Mitglied Platin
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
|
Re: Archiv entpacken mit Prozentanzeige
...es macht schon einen Unterschied, ob ich auspacke oder nur mal schnell die Größe abfrage - es scheint schon sowas wie eine Header-Information zu sein.
Toms Idee, die Header-Infos abzufragen = das Gleiche.
__________________
CU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
|
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
|
 |
|
»
Neue Tutorials
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»
Letzte News
|
 |
|
|
|
|
|
|
|
|
|
|
»
Tools
|
 |
|
|
|
|
|
»
Neue Links
|
 |
|
|
|
|
(Cinema 4D-Objekte)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
»
Jobs @ tutorials.de
|
 |
|
|
|
|
|
|
|
|
|
|