ZIPPEN von Datein, Ordnern und Unterordnern

Status
Nicht offen für weitere Antworten.
U

user0009

Gast
Hallo!

Ich möchte alle Ordner, Unterordner und Dateien im Verzeichnis C:\Java\Programmierung\neu\projekt\
in ein Zipfile zippen. Allerdings habe ich derzeit folgendes Problem:
Mit meinem Code kann ich nur immer den Inhalt eines Ordners ohne Unterordner zu einem Ziparchiv hinzufügen.
Die struktur die gezippt werden soll schaut ungefähr so aus:

Ordner1 -> Unterordner1 -> 30 Files
Ordner1 -> 10 Files
Ordner1 -> Unterordner2 -> 5 Files
....

So nun habe ich folgenden Code der mir zumindest die Files eines Ordners gezippt hat:


Code:
File nf = new File(TempBasisDirectory);
String filedir = nf.getParent();
File dirZip = new File (filedir);
        ZipOutputStream zipOut = new ZipOutputStream( new FileOutputStream("archiv.zip"));
        File [] fileArray = dirZip.listFiles();
		try{
			 for(i = 0; i < fileArray.length; i++)
             {
                fileName = fileArray[i].getAbsolutePath();
                FileInputStream inFile = new FileInputStream(fileName);
                zipOut.putNextEntry(new ZipEntry(fileName));
                int len; 
                while ((len = inFile.read(buf)) > 0) 
                {
                    zipOut.write(buf, 0, len);
                }
                inFile.close();
             }
             zipOut.close();
 

deleted

Bekanntes Mitglied
Ich nehm mal an, das kennt er nicht ;)

Pseudocode:


Methode Zippen(File "ein Ordner") {

Dateiliste liste[] = AlleFilesDiesesOrdners;

ForEach(liste[]) {
Wenn Datei ist Datei:
Zippe diese Datei!

Wenn Datei ist Ordner:
Zippen(diese Datei);

}

}

So hangelt sich dein Programm durch alle Dateien durch.
Das ist zwar nicht sonderlich schnell, aber wenn du nicht zu viele Dateien hast, geht das sehr gut!

Wie du siehst, ruft sich die Methode selbst auf!
Und zwar immer dann, wenn eine Datei in einem Ordner ein Ordner ist mit dieser Datei als Parameter!

Das Ganze nennt sich Rekursion:

http://de.wikipedia.org/wiki/Rekursion

Es ist nicht ganz einfach zu verstehen.
Als ich mich das erste Mal damit auseinandersetzen musste, kam ich ganz schön ins Schwitzen (v.a. bei schwierigeren Aufgaben).

Sollte dir das unverständlich vorkommen, frag ruhig!
 
U

user0009

Gast
Ja das klingt mal nicht schlecht.

Allerdings wie mache ich diese Abfrage:
Code:
if(file==file){
zippen....
}else if (file==folder){
zippen(folder);
}

?
 
U

user0009

Gast
Problem hat sich schon gelöst.
Eine Frage habe ich noch und zwar wie bekomme ich nur relative Pfadangaben für das Archiv.
Momentan speichert es für jede Datei die Pfade so ab: C: | Ordner1 | Ordner2 | Ordner3 | Datei.txt
Ich möchte aber das wenn das Archiv im Ordner2 angelegt wird, dass dann nur mehr die Dateien mit folgendem
Pfad versehen werden:

Datei.txt Ordner2 / Ordner3

Ich hoffe ihr kennt euch aus was ich meine.
 

virus

Aktives Mitglied
user0009 hat gesagt.:
Eine Frage habe ich noch und zwar wie bekomme ich nur relative Pfadangaben für das Archiv.
Momentan speichert es für jede Datei die Pfade so ab: C: | Ordner1 | Ordner2 | Ordner3 | Datei.txt
Ich möchte aber das wenn das Archiv im Ordner2 angelegt wird, dass dann nur mehr die Dateien mit folgendem
Pfad versehen werden:

Datei.txt Ordner2 / Ordner3

Genau das problem hab ich auch. Ich verwende auch eine rekursive funktion die mir eine ganze ordnerstruktur durchgeht und immer wenn eine datei gefunde wurde wird
Code:
zos.putNextEntry(new ZipEntry(f.getAbsolutePath()));
gemacht.

Wie krieg ich das nun hin das mir nicht immer der ganze absoluten pfad gespeichert wird? Sondern nur von dem ordner von dem aus ich starte?
 
G

Gast

Gast
Na in dem du einfach vor dem Zip-Vorgang dir den absoluten Pfad besorgst (siehe API) und denn den jeweiligen neuen absoluten Pfad hernimmst und ihn über eine String-Operation verkürzt.

Z.b.

Vor Zipvorgang: Pfad = /home/ich/bin/test
Während Zip: Pfad = /home/ich/bin/test/foo/bar

Während - Vor: Pfad = /foo/bar
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
E Ordnerhierarchien zippen Allgemeine Java-Themen 2
S Bilder Zippen Allgemeine Java-Themen 3
D Zippen Allgemeine Java-Themen 2
S Kompletten Order Zippen Allgemeine Java-Themen 5
S File zippen Allgemeine Java-Themen 11
L Datein einlesen. Allgemeine Java-Themen 5
D Jar Datein öffnen Allgemeine Java-Themen 9
A Input/Output VBS-Datein mit Java Ausführen Allgemeine Java-Themen 2
H FTP Datein down- und uploaden Allgemeine Java-Themen 1
MineJoke "Config" Datein wir bei neustart des Programms neu erstellt? Allgemeine Java-Themen 0
J Java Dateidownload klappt bei einigen Datein nicht Allgemeine Java-Themen 7
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
DaniSahne96 Input/Output [Sound]Mp3 datein wiedergeben Allgemeine Java-Themen 8
P .Jar Datein Windows Konsole zugewiesen Allgemeine Java-Themen 3
M GWT Datein Speichern Allgemeine Java-Themen 2
S Probleme beim Start von jar Datein Allgemeine Java-Themen 15
0 Datein aus laufender Jar lesen und bearbeiten Allgemeine Java-Themen 10
J Datein speichern Allgemeine Java-Themen 2
ARadauer Schon mal jemand für Ungarn CSV Datein geschreiben? Allgemeine Java-Themen 2
N Datein in Papierkorb verschieben Allgemeine Java-Themen 2
M UTF-8 Datein einlesen, Zeichenproblem Allgemeine Java-Themen 9
X Warum kann ich keine ZIP Datein mit renameto() in was anderes benennen? Allgemeine Java-Themen 13
ARadauer Word Datein bearbeiten Allgemeine Java-Themen 3
X Wie verdammt große Datein öffnen? Allgemeine Java-Themen 2
M Nach export in jar datei werden Datein nicht eingelesen Allgemeine Java-Themen 7
D Verschiedene Datein aus einer Zip Datei ins Programm laden Allgemeine Java-Themen 4
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
ARadauer PDF Datein verbinden Allgemeine Java-Themen 3
V JFilechooser, mehrere Datein selektieren und Reihenfolge? Allgemeine Java-Themen 2
H Arbeitsverzeichnis für Datein wechseln Allgemeine Java-Themen 7
H gezippte Datein öffnen Allgemeine Java-Themen 7
C Temporäre Datein anlegen Allgemeine Java-Themen 2
H html datein einfügen Allgemeine Java-Themen 7
I Fehler beim Schreiben von Datein Allgemeine Java-Themen 3
M Cache & Datein kopieren Allgemeine Java-Themen 3
M Datein einlesen und in feste Größe aufsplitten Allgemeine Java-Themen 2
G class datein verschlüsseln Allgemeine Java-Themen 3
J Backup von Ordnern Allgemeine Java-Themen 2
N Dateizugriff in verschiedenen Ordnern Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben