Ich schreibe gerade an einer Methode zum erstellen eines ZIP-Archivs aus mehreren Dateien. Die funktioniert auch schon, das Problem dabei ist nur, dass in dem ZIP-Archiv der originale Dateipfad der Dateien nachgebildet wird!
So ergibt sich in meinem Testfall im ZIP-Archiv folgende Struktur: D:\firefox_portable\Firefox. Eigentlich möchte ich aber nur, dass die Dateien auf der obersten Ebene im ZIP-Archiv liegen. Wie lässt sich das bewerkstelligen?
Hier meine Methode:
So ergibt sich in meinem Testfall im ZIP-Archiv folgende Struktur: D:\firefox_portable\Firefox. Eigentlich möchte ich aber nur, dass die Dateien auf der obersten Ebene im ZIP-Archiv liegen. Wie lässt sich das bewerkstelligen?
Hier meine Methode:
Code:
/**
* Packt Dateien in eine ZIP-Datei.
*
* @param files Zu archivierende Dateien
* @param zip Zu erstellendes ZIP-Archiv
*/
public static void compressFilesToZip( String[] files, String zip ) {
FileInputStream fis;
int read;
byte[] data = new byte[1024];
try {
// Zip-Archiv mit Stream verbinden
ZipOutputStream zos = new ZipOutputStream( new FileOutputStream(zip) );
// Archivierungs-Modus setzen
zos.setMethod( ZipOutputStream.DEFLATED );
// Kompressionsgrad setzen (9=hoechste Kompression)
zos.setLevel( 9 );
// Hinzufügen der einzelnen Einträge
for ( int i=0; i < files.length; i++ ) {
// Eintrag für neue Datei anlegen
ZipEntry entry = new ZipEntry( files[i] );
System.out.println( entry.toString() );
fis = new FileInputStream( files[i] );
// Neuer Eintrag dem Archiv hinzufügen
zos.putNextEntry( entry );
// Hinzufügen der Daten zum neuen Eintrag
while( (read = fis.read(data, 0, data.length)) != -1 ) {
zos.write( data, 0, read );
}
// Neuen Eintrag abschließen
zos.closeEntry();
fis.close();
}
zos.close();
} catch( Exception e ) {
e.printStackTrace();
}
}