# Zip Archiv erstellen



## search@info (12. Mrz 2008)

Hallo Leute

Ich erstelle in einer Schleife jede Menge XML-Dateien. Diese Dateien will ich in ein Zip Archiv einfügen.
Kann mir jemand anhand eines Quelltextbeispieles zeigen, wie das geht?


----------



## Niki (12. Mrz 2008)

Ich hab da mal was geschrieben, man kann das Zippen auch abbrechen:

```
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Zip {
	
	private boolean stop = false;
	
	public void zip(File[] files, File out) throws IOException {
		if(stop)
			return;
		FileOutputStream fos = null;

		ZipOutputStream zos = null;
		try {
			fos = new FileOutputStream(out);
			zos = new ZipOutputStream(fos);
			
			// 4k blöcke schreiben
			byte[] buf = new byte[1024 * 4];
			
			for (int i = 0; i < files.length; i++) {
				File f = files[i];
				if(stop)
					return;
				
				zos.putNextEntry(new ZipEntry(f.getName()));
				FileInputStream fis = new FileInputStream(f);
				int len = fis.read(buf);
				while(len > -1){
					zos.write(buf, 0, len);
					len = fis.read(buf);
				}				
				zos.closeEntry();
				fis.close();
			}		
		} finally {
			if(zos != null){
				zos.flush();
				zos.close();
			}
		}
	}
	
	public void stop(){
		stop = true;
	}
}
```


----------



## search@info (12. Mrz 2008)

Danke für deine schnelle Antwort.
Habe ich das richtig verstanden, dass das File Array alle meine XML-Dateien enthält und diese dann zum Zip Archiv umgewandelt werden?


----------



## Niki (12. Mrz 2008)

Genau!


----------



## Cravi (14. Dez 2008)

Hallo zusammen,

hierzu hätte ich auch eine Frage. Unz zwar ist mir das schreiben der Zip Datei zwar klar nur habe ich dabei ein kleines Problem.

Ich habe 2 Dateien aus unterschiedlichen Ordnern die in eine Zip Datei sollen. Allerdings ohne die jeweilige Ordnerstruktur.
Denn mein Problem ist dass diese beim speichern immer mit dazu gepackt wird. 
Laden tue ich die Dateien über einen FileChooser.

Wäre um Hilfe wirklich dankbar.

Viele Grüße
Cravi


----------



## Wildcard (14. Dez 2008)

Du bestimmst doch was in dem Zip Entry drin steht.


----------



## Cravi (14. Dez 2008)

Ähm klar tu ich das... 
mein Code sieht so aus



```
private void save(File zipFile, String[]data)
	{
		try 
		{
	           ZipOutputStream zipOut  = new ZipOutputStream( new FileOutputStream(zipFile) ) ;

		   for(int i = 0; i < data.length; i++)
		   {
			   BufferedInputStream bis = new BufferedInputStream( new FileInputStream(f) );
			   int avail = bis.available();
			   byte[] buffer = new byte[avail] ;
			   if ( avail>0 )
			   {
			      bis.read(buffer, 0, avail) ;
			      bis.close();
			   }
			   ZipEntry ze = new ZipEntry(fileName); 
			   zipOut.putNextEntry(ze);
			   System.out.println(buffer);
			   zipOut.write(buffer, 0, buffer.length);
		   }
		   zipOut.closeEntry(); 
		   zipOut.close();

       ....................
```

Nur dass ich ja ein File aus dem FileChooser übergebe welches dann den Pfad /Users/Cravi/blubb.jpg besitzt.

Und wenn ich es so in das Zip speichern will dann erstellt er mir auch die 2 Ordner in der Zipdatei.

Oder kann ich dem ZipEntry sagen dass er keine Ordner mitübernimmt?

Sry stehe da echt ein bisschen auf dem Schlauch


----------



## Wildcard (14. Dez 2008)

Es gibt keine Verzeichnisse in einem zip. Nur Entries. Ein Entry ist ein Name/Pfad + bytes. Es liegt an dir welchen Pfad du übergibst.


----------



## Cravi (14. Dez 2008)

das ist mir im prinzip schon klar. 
Nur wenn ich die Datei von irgendwoher hole dann hat sie eben den kompletten Pfad an sich. Den kann ich ja auch nicht einfach löschen, da der Bytestrom ja wissen muss wo die Datei auf dem Rechner liegt und er sie somit einlesen kann.

Die einzige Möglichkeit die ich gefunden habe ist eine Kopie dieser Datei in mein Java Verzeichnis zu kopieren, so dass er den Standardpfad nehmen kann. Aber dass ist eben ein bisschen umständlich und ich habe gehofft dass es auch ohne diesen Umweg geht.

Sry wenn ich es nicht richtig schaffe mein Problem darzustellen.


----------



## Cravi (14. Dez 2008)

Oooohhh maaaaannnn,
Sonntags sollte man einfach nicht mehr arbeiten *g

Habe es jetzt hinbekommen. Habe die ganze Zeit etwas den Sinn des Entity nicht richtig verstanden. Dachte er brauch auch den kompletten Pfad der Datei. Aber im Endeffekt sagt er ja nur aus wie der Eintrag in der Zipdatei aussehen soll.

Jetzt verstehe ich auch was du meintest.
Danke auf jeden Fall für deine Hilfe ;-)

Viele Grüße
Cravi


----------

