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. Manche Packprogramme können außerdem meine ZIP-Datei nichtmal einlesen, weil "D:" unter windows ein ungültiger Ordner/Dateiname ist!
Wie lässt sich das bewerkstelligen?
Hier meine Methode:
Alles anzeigen
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. Manche Packprogramme können außerdem meine ZIP-Datei nichtmal einlesen, weil "D:" unter windows ein ungültiger Ordner/Dateiname ist!
Wie lässt sich das bewerkstelligen?
Hier meine Methode:
Quellcode
- /**
- * 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();
- }
- }
[Blockierte Grafik: http://www.fes-kommcheckers.de/images/08_rechtsextremismus.jpg]