Datein aus Zip-Archiv in 2. Archiv kopieren

access100

Grünschnabel
Servus Leute,

ich hab da ein kleines Problem mit dem packen von Dateien direkt aus einem Archiv in ein zweites.

Ich weiß, wie ich die Dateien von einem Archiv entpacken kann und dann die Dateien aus dem betimmten Verzeichnis wieder in ein neues Archiv packen kann, aber ich würde diesen Schritt gerne umgehen und direkt die Dateien aus dem ersten Archiv in das zweite Archiv schieben. Ich weiß nur nicht, wie ich die Dateien ansprechen kann, weil nur mit "ZipEntry.getName()" klappt das ganze nicht.

Ist das möglich oder geht das nur über den Umweg entpacken -> neu packen
 
Versuch mal mit einem ZipInputStream vom Zip zu lesen. Dort kommst du mit nextEntry immer einen Eintrag weiter. Von nem Entry kannst du dir mit getSize die Länge geben lassen und dann auf den InputStream mit read dieses Entry in ein ByteArray einlesen und dieses dann mit nem ZipOutputStream wieder schreiben. Mit skip kannst du Einträge überspringen die dich nicht interessieren. Ob das so wirklich effizient ist weiß ich allerdings nicht. Kannst ja mal probieren :)
 
Hallo,

schau mal hier
Code:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;


public class ZipFileExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		File archiveFile = new File("/home/sash/Downloads/Firefox/jdk-6-doc.zip");

		copy(archiveFile);
	}

	public static void copy(File archiveFile)
			throws Exception {

		File newFile = new File("/home/sash/NewZip.zip");

		ZipFile zipSrc = new ZipFile(archiveFile);

		ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(newFile));

		Enumeration srcEntries = zipSrc.entries();
		while (srcEntries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) srcEntries.nextElement();
			ZipEntry newEntry = new ZipEntry(entry.getName());
			zos.putNextEntry(newEntry);

			BufferedInputStream bis = new BufferedInputStream(zipSrc
					.getInputStream(entry));

			while (bis.available() > 0) {
				zos.write(bis.read());
			}
			zos.closeEntry();

			bis.close();
		}

		


		zos.finish();

		zos.close();

		zipSrc.close();

	}

}


Du musst jetzt nur noch eine IF-Anweisung reinpacken und damit dann nur die Entries wählen, die auch ins neue File rein sollen. Im Moment werden einfach alle reingepackt.

MFG

Sascha
 
Servus,

hey Leute vielen Dank für die Hilfe.

@zerix: Super Code, funktioniert einwandfrei. Besten Dank :)
 
Zuletzt bearbeitet von einem Moderator:
Zurück