Zurück tutorials.de > Programming > Java

 
 
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 :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum

Jubiläums-Countdown 23.02 23.03 23.04 23.05 23.06 23.07 23.08 23.09


4 kostenlose Bücher bei unserer Buch-Verschenkaktion 03/2010
  AntwortAntworten (über Gastzugang)    
  AntwortAntworten (über Gastzugang)    
 
Themen-Optionen Ansicht
Alt 09.10.05, 14:34   #1 (permalink)
Mitglied Gold
 
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
MiRaMC hat eine blütenweiße Weste

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();
  			}
  		}
  	}
  }
  MiRaMC ist offline  
 
Alt 10.10.05, 09:29   #2 (permalink)
Mitglied Platin
 
Benutzerbild von schnuffie  
 
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
schnuffie befindet sich auf einem aufstrebenden Ast

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.
  schnuffie ist offline  
 
Alt 10.10.05, 11:20   #3 (permalink)
Mitglied Brokat
 
Benutzerbild von RealHAZZARD  
 
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
RealHAZZARD hat eine blütenweiße Weste

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.
  RealHAZZARD ist offline  
 
Alt 10.10.05, 13:44   #4 (permalink)
Mitglied Gold
 
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
MiRaMC hat eine blütenweiße Weste

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
  MiRaMC ist offline  
 
Alt 10.10.05, 14:47   #5 (permalink)
Mitglied Brokat
 
Benutzerbild von RealHAZZARD  
 
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
RealHAZZARD hat eine blütenweiße Weste

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.
  RealHAZZARD ist offline  
 
Alt 10.10.05, 15:10   #6 (permalink)
Mitglied Gold
 
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
MiRaMC hat eine blütenweiße Weste

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?
  MiRaMC ist offline  
 
Alt 10.10.05, 15:29   #7 (permalink)
Mitglied Brokat
 
Benutzerbild von RealHAZZARD  
 
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
RealHAZZARD hat eine blütenweiße Weste

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.
  RealHAZZARD ist offline  
 
Alt 10.10.05, 19:35   #8 (permalink)
Mitglied Gold
 
Registriert seit: Sep 2003
Beiträge: 106
Renommee-Modifikator: 14
MiRaMC hat eine blütenweiße Weste

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
  MiRaMC ist offline  
 
Alt 11.10.05, 08:29   #9 (permalink)
Mitglied Brokat
 
Benutzerbild von RealHAZZARD  
 
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
RealHAZZARD hat eine blütenweiße Weste

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.
  RealHAZZARD ist offline  
 
Alt 11.10.05, 08:30   #10 (permalink)
 
Benutzerbild von Thomas Darimont tutorials.de Administrator 
 
Registriert seit: Jun 2002
Ort: Saarbrücken (Saarland)
Beiträge: 9.165
Renommee-Modifikator: 61
Thomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende Zukunft

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
__________________
Java rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
  Thomas Darimont ist offline  
 
Alt 11.10.05, 08:44   #11 (permalink)
Mitglied Brokat
 
Benutzerbild von RealHAZZARD  
 
Registriert seit: Mar 2005
Beiträge: 388
Renommee-Modifikator: 12
RealHAZZARD hat eine blütenweiße Weste

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.
  RealHAZZARD ist offline  
 
Alt 11.10.05, 10:44   #12 (permalink)
Mitglied Platin
 
Benutzerbild von schnuffie  
 
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
schnuffie befindet sich auf einem aufstrebenden Ast

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.
  schnuffie ist offline  
 
Alt 11.10.05, 12:47   #13 (permalink)
 
Benutzerbild von Thomas Darimont tutorials.de Administrator 
 
Registriert seit: Jun 2002
Ort: Saarbrücken (Saarland)
Beiträge: 9.165
Renommee-Modifikator: 61
Thomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende ZukunftThomas Darimont hat eine strahlende Zukunft

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
__________________
Java rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
  Thomas Darimont ist offline  
 
Alt 11.10.05, 13:02   #14 (permalink)
Mitglied Platin
 
Benutzerbild von schnuffie  
 
Registriert seit: Oct 2004
Ort: Ober-Roden (Hessen)
Beiträge: 697
Renommee-Modifikator: 14
schnuffie befindet sich auf einem aufstrebenden Ast

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.
  schnuffie ist offline  
 
 
 
Lesezeichen:


Themen-Optionen
Ansicht
Ähnliche Themen
 
Thema Autor Forum Antworten Letzter Beitrag
Externe swf-Dateien mit Prozentanzeige jackassol Flash 9 03.01.06 00:05
Fehlermaldung beim Versuch, ein Archiv zu entpacken C4D_Joe Microsoft Windows 7 04.07.05 08:52
Upload mit entpacken borgelite PHP 23 22.05.05 10:52
Kann WinRAR archiv nicht entpacken. sleepo Microsoft Windows 7 23.05.04 19:32
packen / entpacken mit php Razorhawk PHP 6 08.09.02 14:45
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 137
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 264
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 152
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 103
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 194
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 80,41%
156 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 19,59%
38 Stimmen
Stimmen gesamt: 194
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.5.0 RC2 ©2010, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,19779 Sekunden mit 26 queries