Zip/Jar - File in einem anderem Jar entpacken & auf Disk kopieren.

stEEdZ

Mitglied
Zip/Jar - File aus einem anderem Jar entpacken & auf Disk kopieren.

Hallo allerseits,
ich habe in einem Jar File ein Zip/Jar - File und will dieses einfach auf meine Festplatte entpacken.

Durch Hilfe verschiedener Threads konnte ich mir auch etwas zusammen basteln.
Ich habe auch das Gefühl dass ich nur einen kleinen Schritt von der Lösung entfernt bin, dennoch funktioniert das Skript leider so noch nicht ganz.

Ich wäre sehr froh wenn mal jemand drüber schauen und mir meine Fehler aufzeigen könnte. :rolleyes:

PHP:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class ZipArchiveExtractor {

	/**
	 * @param args
	 */
	
	

	public void extractArchive(InputStream archive, File destDir) throws Exception {
		if (!destDir.exists()) {
			destDir.mkdir();
		}

		ZipInputStream quelle = new ZipInputStream(archive);
		

		byte[] buffer = new byte[16384];
		int len;
		while (true) {
			ZipEntry entries = quelle.getNextEntry();

			String entryFileName = entries.getName();

			File dir = buildDirectoryHierarchyFor(entryFileName, destDir);
			if (!dir.exists()) {
				dir.mkdirs();
			}

			if (!entries.isDirectory()) {
				BufferedOutputStream bos = new BufferedOutputStream(
						new FileOutputStream(new File(destDir, entryFileName)));

				BufferedInputStream bis = new BufferedInputStream(quelle);

				while ((len = bis.read(buffer)) > 0) {
					bos.write(buffer, 0, len);
				}

				bos.flush();
				bos.close();
				bis.close();
			}
		}
	}

	private File buildDirectoryHierarchyFor(String entryName, File destDir) {
		int lastIndex = entryName.lastIndexOf('/');
		String entryFileName = entryName.substring(lastIndex + 1);
		String internalPathToEntry = entryName.substring(0, lastIndex + 1);
		return new File(destDir, internalPathToEntry);
	}
	
	
	
	public static void main(String[] args, String path) throws Exception {
		InputStream quelle = ZipArchiveExtractor.class.getResourceAsStream("Script.jar");
		new ZipArchiveExtractor().extractArchive(quelle, new File(
				"c:/SCRIPT"));
	}
}

vielen Dank für die Hilfe
steedz
 
Zuletzt bearbeitet:
Hallo,
die Grundlage dieses Skriptes ist aus einer Vorgabe hier aus dem Forum! hier
Allerdings wird hier aus einem Zip von einer Vorgegebenen Pfad ausgelesen, was bei mir in einem ausgeführten Jar wäre! Ansonsten klappt das aber super!

Ich vermute dass der/die Fehler entweder im Aufruf des Jar-Files aus dem ausgeführten Jar stecken...
Code:
InputStream quelle = ZipArchiveExtractor.class.getResourceAsStream("Script.jar");

Oder dass die Umwandlung von InputStream in main hinzu ZipInputStream in der Funktion einfach nicht stimmt...
Code:
 public void extractArchive(InputStream archive, File destDir) throws Exception { 
//...
//...
 ZipInputStream quelle = new ZipInputStream(archive);

Oder dass bei "BufferedInputStream " die Variable "quelle" eine andere sein müsste?
Code:
BufferedInputStream bis = new BufferedInputStream(quelle);

Leider bin ich mit java noch sehr unerfahren da ich erst vor 2 Wochen auf diese Sprache umgestiegen bin!
Die Fehler könnten sich also auch ganz wo anders verstecken :rolleyes:

Danke für die Hilfe
steedz
 
Zuletzt bearbeitet:
Ich wollte nicht wissen wo du meinst dass der Fehler ist, sondern wie sich dieser bemerkbar macht. Bekommst du eine Fehlermeldung oder wird einfach nichts entpackt? Irgendwie mußt du ja zu dem Schluß gekommen sein dass es nicht richtig funktioniert.
 
Es entpackt einfach nicht!
Problem ist natürlich dass ich ja ein JarFile ausführen muss um überhaupt auf das andere jar zugreifen zu können, dementsprechend seh ich auch kein Exceptionhandling weil ja keine Konsole mitläuft...

Danke
 
Dann starte doch dein Jar in dem du in der Konsole in den Ordner des Jar wechselst und dann
java -jar deinjar.jar
eingibst.

Dann siehst du auch alles.
 
Ok, danke für den Tip!
Für die meisten Leute wahrscheinlich sehr trivial aber mir war das tatsächlich nicht klar, wie ich die Nachrichten anschauen kann :suspekt:

So nun zurück zum Thema...
Also ich bekomm die Exceptions:

java.lang.NullPointerException: in is null
at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:56)
at ZipArchiveExtractor.extractArchive(ZipArchiveExtractor.java:26)
at ZipArchiveExtractor.main(ZipArchiveExtractor.java:69)
at Main.main(Main.java:17)

Danke für die Hilfe
steedz
 
Hallo,
also das jar liegt wegen mir auf C: (das is ja relativ unrelevant oder?)
Das Jar das ich quasi entpacken will liegt ganz normal im jar-file, also mein build sieht im Prinzip so aus:

>...jdk1.6.0_07/bin/jar.exe -cfmv0 meinJar.jar Manifest.txt Main.class extractJarFile.class UNZIPME.jar

UNZIPME.jar will ich quasi auspacken und auf Festplatte schupsen! (im Code is das Skript.jar)

Danke für die Hilfe
steedz
 
Java:
ZipArchiveExtractor.class.getResourceAsStream("Script.jar");

Wenn du das so schreibst, muss das Script.jar innerhalb deines Jars im selben Ordner wie die Klasse ZipArchiveExtractor liegen. Ist das der Fall? In Jars kann man ja mit jedem Zip-Tool reinschauen.
 
Zurück