In-memory entpacken eines Zip-Files und dessen Inhalt weiterverarbeiten

-ben-

Mitglied
Hallo zusammen

Folgender UseCase: Ich erhalte über's Netz Daten welche gezippt sind als byte[] zugesendet. Dieses Zip-File würde ich nun In-memory entpacken (ohne ein temporäres File auf der HD anzulegen) und die enthaltenen Dateien weiterverarbeiten.

Folgender Code dazu:

Code:
public void importAsZip(InputStream in) {
	
	ZipInputStream zipInputStream = new ZipInputStream(in);
	ZipEntry entry = null;
	
	try {
		while((entry = zipInputStream.getNextEntry()) != null) {
			// TODO
		}
	} catch (IOException e) {
		// errorhandling
	} finally {
		// close stream
	}
}

Ich sehe momentan keine Möglichkeit mithilfe des offiziellen Java-ZIP-API's (http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/package-summary.html) dieses Problem zu lösen :confused: Ich möchte auf Zeile 8 anstelle des TODO's den Inhalt der gepackten Dateien weiterverarbeiten..

Wenn ich die Daten aus einer persistenten Datei lesen würde, gäbe es kein Problem. Dies könnte ich über die Methode getInputStream(ZipEntry entry) der Klasse ZipFile erledigen. Jedoch habe ich keine Instanz von ZipFile da das ganze in-memory geschehen soll...

Wer kann mir weiterhelfen?

Vielen Dank und Gruss
 
Hi -ben-,

hab mich nicht so sehr mit ZIP Files beschäftigt, aber eventuell könnte man das so machen:

Java:
public class ZipTest {

	public byte[] getZipEntryContent(File file, String zipEntryName) throws IOException {
		byte[] buf = new byte[(int)file.length()];
	    FileInputStream fis = new FileInputStream(file);
	    fis.read(buf);
	    fis.close();
	    
	    ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(buf));
	    ZipEntry ze;
	    
	    ByteArrayOutputStream bos = new ByteArrayOutputStream();
	    
	    while((ze = zis.getNextEntry()) != null) {
	    	if(ze.getName().equals(zipEntryName)) {
		    	byte zeBuff[] = new byte[(int)ze.getSize()];
		    	zis.read(zeBuff);
		    	bos.write(zeBuff);
	    	}
	    }
	    bos.close();
	    zis.close();
	    
	    return bos.toByteArray();    
	}
	
	
	
	public static void main(String[] args) throws IOException {
		ZipTest tz = new ZipTest();
		byte[] res = tz.getZipEntryContent(new File("test.zip"), "bla2.txt");
		System.out.println(new String(res));
		
	}
}

Gruß
joschi
 
Zurück