Mittwoch, 3. Februar 2010

Ziparchiv im Speicher entpacken

Neulich gab es den Wunsch die zu verarbeitenden XML-Dateien in Form eines Zip-Archives anliefern zu lassen. Weil sich der Dateizugriff verbot, sollte dies im Speicher geschehen. Hier der (verallgemeinerte) Code:

static List<byte[]> extract(byte[] zipData,
String codepage, boolean verbose) {
try {
final JarInputStream jar = new JarInputStream(new
ByteArrayInputStream(zipData));
final ArrayList<byte[]> result = new ArrayList<byte[]>();

final ByteArrayOutputStream bout = new ByteArrayOutputStream();
final byte[] readBuff = new byte[4096];

while (jar.getNextEntry()!=null) {
int len = 0;
while ((len = jar.read(readBuff))!=-1) {
bout.write(readBuff,0,len);
}

result.add(bout.toByteArray());
bout.reset();
}
jar.close();

return result;
} catch (Exception e) {
return null;
}
}