Ich muss ein gzip-Archiv mit mehreren Dateien darin erstellen, wie kann ich dies tun, ohne ArchiveEntry
verfügbar für java.util.zip.GZIPOutputStream
Klasse?
Antworten
Zu viele Anzeigen?Según la Wikipedia-Eintrag auf gzip
:
Obwohl das Dateiformat auch mehrere solcher Streams zulässt konkateniert werden können (gezippte Dateien werden einfach dekomprimiert und konkateniert, als ob als wären sie ursprünglich eine einzige Datei), wird gzip normalerweise verwendet, um nur einzelne Dateien.
Das ist der Grund GZIPOutputStream
unterstützt nicht ArchiveEntry
.
Normalerweise werden mehrere Dateien in einer einzigen Datei archiviert. tar
dann komprimiert mit gzip
zur Herstellung eines .tar.gz
komprimiertes Archiv.
Sie könnten eine tar.gz
auf diese Weise durch die Verwendung der Apache Commons Compress
Umsetzung für tar
:
file_out = new FileOutputStream (new File ("archive.tar.gz"));
buffer_out = new BufferedOutputStream (file_out);
gzip_out = new GzipCompressorOutputStream (buffer_out);
tar_out = new TarArchiveOutputStream (gzip_out);
// .. and then talk to 'tar_out' to write stuff
Hier ist ein ausführlicheres Beispiel die ganze Verzeichnisse komprimiert.
GZip komprimiert einen Stream. Wenn Leute GZip mit mehreren Dateien verwenden, benutzen sie normalerweise auch tar, um sie zusammenzufassen
Eine Java-Tar-Library finden Sie hier: http://www.trustice.com/java/tar/
Oder Sie könnten Zip statt GZip verwenden