Class ZipOutputStream
- java.lang.Object
- 
- java.io.OutputStream
- 
- java.io.FilterOutputStream
- 
- org.apache.tools.zip.ZipOutputStream
 
 
 
- 
- All Implemented Interfaces:
- java.io.Closeable,- java.io.Flushable,- java.lang.AutoCloseable
 
 public class ZipOutputStream extends java.io.FilterOutputStreamReimplementation ofjava.util.zip.ZipOutputStreamthat does handle the extended functionality of this package, especially internal/external file attributes and extra fields with different layouts for local file data and central directory entries.This class will try to use RandomAccessFilewhen you know that the output is going to go to a file.If RandomAccessFile cannot be used, this implementation will use a Data Descriptor to store size and CRC information for DEFLATEDentries, this means, you don't need to calculate them yourself. Unfortunately this is not possible for theSTOREDmethod, here setting the CRC and uncompressed size information is required beforeputNextEntrycan be called.As of Apache Ant 1.9.0 it transparently supports Zip64 extensions and thus individual entries and archives larger than 4 GB or with more than 65536 entries in most cases but explicit control is provided via setUseZip64(org.apache.tools.zip.Zip64Mode). If the stream can not user RandomAccessFile and you try to write a ZipEntry of unknown size then Zip64 extensions will be disabled by default.
- 
- 
Nested Class SummaryNested Classes Modifier and Type Class Description static classZipOutputStream.UnicodeExtraFieldPolicyenum that represents the possible policies for creating Unicode extra fields.
 - 
Field SummaryFields Modifier and Type Field Description protected byte[]bufThis buffer serves as a Deflater.protected static byte[]CFH_SIGcentral file header signatureprotected static byte[]DD_SIGdata descriptor signatureprotected java.util.zip.DeflaterdefThis Deflater object is used for output.static intDEFAULT_COMPRESSIONDefault compression level for deflated entries.static intDEFLATEDCompression method for deflated entries.static intEFS_FLAGDeprecated.useGeneralPurposeBit.UFT8_NAMES_FLAGinsteadprotected static byte[]EOCD_SIGend of central dir signatureprotected static byte[]LFH_SIGlocal file header signaturestatic intSTOREDCompression method for stored entries.
 - 
Constructor SummaryConstructors Constructor Description ZipOutputStream(java.io.File file)Creates a new ZIP OutputStream writing to a File.ZipOutputStream(java.io.OutputStream out)Creates a new ZIP OutputStream filtering the underlying stream.
 - 
Method SummaryModifier and Type Method Description protected static longadjustToLong(int i)Deprecated.use ZipUtil#adjustToLongbooleancanWriteEntryData(ZipEntry ae)Whether this stream is able to write the given entry.voidclose()Closes this output stream and releases any system resources associated with the stream.voidcloseEntry()Writes all necessary data for this entry.protected voiddeflate()Writes next block of compressed data to the output stream.voidfinish()voidflush()Flushes this output stream and forces any buffered output bytes to be written out to the stream.protected byte[]getBytes(java.lang.String name)Retrieve the bytes for the given String in the encoding set for this Stream.java.lang.StringgetEncoding()The encoding to use for filenames and the file comment.booleanisSeekable()This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).voidputNextEntry(ZipEntry archiveEntry)voidsetComment(java.lang.String comment)Set the file comment.voidsetCreateUnicodeExtraFields(ZipOutputStream.UnicodeExtraFieldPolicy b)Whether to create Unicode Extra Fields.voidsetEncoding(java.lang.String encoding)The encoding to use for filenames and the file comment.voidsetFallbackToUTF8(boolean b)Whether to fall back to UTF and the language encoding flag if the file name cannot be encoded using the specified encoding.voidsetLevel(int level)Sets the compression level for subsequent entries.voidsetMethod(int method)Sets the default compression method for subsequent entries.voidsetUseLanguageEncodingFlag(boolean b)Whether to set the language encoding flag if the file name encoding is UTF-8.voidsetUseZip64(Zip64Mode mode)Whether Zip64 extensions will be used.protected static byte[]toDosTime(long t)Deprecated.use ZipUtil#toDosTimeprotected static ZipLongtoDosTime(java.util.Date time)Deprecated.use ZipUtil#toDosTimevoidwrite(byte[] b, int offset, int length)Writes bytes to ZIP entry.protected voidwriteCentralDirectoryEnd()Writes the "End of central dir record".protected voidwriteCentralFileHeader(ZipEntry ze)Writes the central file header entry.protected voidwriteDataDescriptor(ZipEntry ze)Writes the data descriptor entry.protected voidwriteLocalFileHeader(ZipEntry ze)Writes the local file header entryprotected voidwriteOut(byte[] data)Write bytes to output or random access file.protected voidwriteOut(byte[] data, int offset, int length)Write bytes to output or random access file.protected voidwriteZip64CentralDirectory()Writes the "ZIP64 End of central dir record" and "ZIP64 End of central dir locator".
 
- 
- 
- 
Field Detail- 
DEFLATEDpublic static final int DEFLATED Compression method for deflated entries.- Since:
- 1.1
- See Also:
- Constant Field Values
 
 - 
DEFAULT_COMPRESSIONpublic static final int DEFAULT_COMPRESSION Default compression level for deflated entries.- Since:
- Ant 1.7
- See Also:
- Constant Field Values
 
 - 
STOREDpublic static final int STORED Compression method for stored entries.- Since:
- 1.1
- See Also:
- Constant Field Values
 
 - 
EFS_FLAG@Deprecated public static final int EFS_FLAG Deprecated.useGeneralPurposeBit.UFT8_NAMES_FLAGinsteadGeneral purpose flag, which indicates that filenames are written in utf-8.- See Also:
- Constant Field Values
 
 - 
defprotected final java.util.zip.Deflater def This Deflater object is used for output.
 - 
bufprotected byte[] buf This buffer serves as a Deflater.This attribute is only protected to provide a level of API backwards compatibility. This class used to extend DeflaterOutputStreamup to Revision 1.13.- Since:
- 1.14
 
 - 
LFH_SIGprotected static final byte[] LFH_SIG local file header signature- Since:
- 1.1
 
 - 
DD_SIGprotected static final byte[] DD_SIG data descriptor signature- Since:
- 1.1
 
 - 
CFH_SIGprotected static final byte[] CFH_SIG central file header signature- Since:
- 1.1
 
 - 
EOCD_SIGprotected static final byte[] EOCD_SIG end of central dir signature- Since:
- 1.1
 
 
- 
 - 
Constructor Detail- 
ZipOutputStreampublic ZipOutputStream(java.io.OutputStream out) Creates a new ZIP OutputStream filtering the underlying stream.- Parameters:
- out- the outputstream to zip
- Since:
- 1.1
 
 - 
ZipOutputStreampublic ZipOutputStream(java.io.File file) throws java.io.IOExceptionCreates a new ZIP OutputStream writing to a File. Will use random access if possible.- Parameters:
- file- the file to zip to
- Throws:
- java.io.IOException- on error
- Since:
- 1.14
 
 
- 
 - 
Method Detail- 
isSeekablepublic boolean isSeekable() This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).For seekable streams, you don't need to calculate the CRC or uncompressed size for STOREDentries before invokingputNextEntry(org.apache.tools.zip.ZipEntry).- Returns:
- true if seekable
- Since:
- 1.17
 
 - 
setEncodingpublic void setEncoding(java.lang.String encoding) The encoding to use for filenames and the file comment.For a list of possible values see https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html. Defaults to the platform's default character encoding. - Parameters:
- encoding- the encoding value
- Since:
- 1.3
 
 - 
getEncodingpublic java.lang.String getEncoding() The encoding to use for filenames and the file comment.- Returns:
- null if using the platform's default character encoding.
- Since:
- 1.3
 
 - 
setUseLanguageEncodingFlagpublic void setUseLanguageEncodingFlag(boolean b) Whether to set the language encoding flag if the file name encoding is UTF-8.Defaults to true. - Parameters:
- b- boolean
 
 - 
setCreateUnicodeExtraFieldspublic void setCreateUnicodeExtraFields(ZipOutputStream.UnicodeExtraFieldPolicy b) Whether to create Unicode Extra Fields.Defaults to NEVER. - Parameters:
- b- boolean
 
 - 
setFallbackToUTF8public void setFallbackToUTF8(boolean b) Whether to fall back to UTF and the language encoding flag if the file name cannot be encoded using the specified encoding.Defaults to false. - Parameters:
- b- boolean
 
 - 
setUseZip64public void setUseZip64(Zip64Mode mode) Whether Zip64 extensions will be used.When setting the mode to Never,putNextEntry(org.apache.tools.zip.ZipEntry),closeEntry(),finish()orclose()may throw aZip64RequiredExceptionif the entry's size or the total size of the archive exceeds 4GB or there are more than 65536 entries inside the archive. Any archive created in this mode will be readable by implementations that don't support Zip64.When setting the mode to Always, Zip64 extensions will be used for all entries. Any archive created in this mode may be unreadable by implementations that don't support Zip64 even if all its contents would be.When setting the mode to AsNeeded, Zip64 extensions will transparently be used for those entries that require them. This mode can only be used if the uncompressed size of theZipEntryis known when callingputNextEntry(org.apache.tools.zip.ZipEntry)or the archive is written to a seekable output (i.e. you have used theFile-arg constructor) - this mode is not valid when the output stream is not seekable and the uncompressed size is unknown whenputNextEntry(org.apache.tools.zip.ZipEntry)is called.If no entry inside the resulting archive requires Zip64 extensions then Neverwill create the smallest archive.AsNeededwill create a slightly bigger archive if the uncompressed size of any entry has initially been unknown and create an archive identical toNeverotherwise.Alwayswill create an archive that is at least 24 bytes per entry bigger than the oneNeverwould create.Defaults to AsNeededunlessputNextEntry(org.apache.tools.zip.ZipEntry)is called with an entry of unknown size and data is written to a non-seekable stream - in this case the default isNever.- Parameters:
- mode- Zip64Mode
- Since:
- 1.3
 
 - 
finishpublic void finish() throws java.io.IOException- Throws:
- Zip64RequiredException- if the archive's size exceeds 4 GByte or there are more than 65535 entries inside the archive and- setUseZip64(org.apache.tools.zip.Zip64Mode)is- Zip64Mode.Never.
- java.io.IOException
 
 - 
closeEntrypublic void closeEntry() throws java.io.IOExceptionWrites all necessary data for this entry.- Throws:
- java.io.IOException- on error
- Zip64RequiredException- if the entry's uncompressed or compressed size exceeds 4 GByte and- setUseZip64(org.apache.tools.zip.Zip64Mode)is- Zip64Mode.Never.
- Since:
- 1.1
 
 - 
putNextEntrypublic void putNextEntry(ZipEntry archiveEntry) throws java.io.IOException - Throws:
- Zip64RequiredException- if the entry's uncompressed or compressed size is known to exceed 4 GByte and- setUseZip64(org.apache.tools.zip.Zip64Mode)is- Zip64Mode.Never.
- java.io.IOException
 
 - 
setCommentpublic void setComment(java.lang.String comment) Set the file comment.- Parameters:
- comment- the comment
 
 - 
setLevelpublic void setLevel(int level) Sets the compression level for subsequent entries.Default is Deflater.DEFAULT_COMPRESSION. - Parameters:
- level- the compression level.
- Throws:
- java.lang.IllegalArgumentException- if an invalid compression level is specified.
- Since:
- 1.1
 
 - 
setMethodpublic void setMethod(int method) Sets the default compression method for subsequent entries.Default is DEFLATED. - Parameters:
- method- an- intfrom java.util.zip.ZipEntry
- Since:
- 1.1
 
 - 
canWriteEntryDatapublic boolean canWriteEntryData(ZipEntry ae) Whether this stream is able to write the given entry.May return false if it is set up to use encryption or a compression method that hasn't been implemented yet. - Parameters:
- ae- ZipEntry
- Returns:
- boolean
 
 - 
writepublic void write(byte[] b, int offset, int length) throws java.io.IOExceptionWrites bytes to ZIP entry.- Overrides:
- writein class- java.io.FilterOutputStream
- Parameters:
- b- the byte array to write
- offset- the start position to write from
- length- the number of bytes to write
- Throws:
- java.io.IOException- on error
 
 - 
closepublic void close() throws java.io.IOExceptionCloses this output stream and releases any system resources associated with the stream.- Specified by:
- closein interface- java.lang.AutoCloseable
- Specified by:
- closein interface- java.io.Closeable
- Overrides:
- closein class- java.io.FilterOutputStream
- Throws:
- java.io.IOException- if an I/O error occurs.
- Zip64RequiredException- if the archive's size exceeds 4 GByte or there are more than 65535 entries inside the archive and- setUseZip64(org.apache.tools.zip.Zip64Mode)is- Zip64Mode.Never.
 
 - 
flushpublic void flush() throws java.io.IOExceptionFlushes this output stream and forces any buffered output bytes to be written out to the stream.- Specified by:
- flushin interface- java.io.Flushable
- Overrides:
- flushin class- java.io.FilterOutputStream
- Throws:
- java.io.IOException- if an I/O error occurs.
 
 - 
deflateprotected final void deflate() throws java.io.IOExceptionWrites next block of compressed data to the output stream.- Throws:
- java.io.IOException- on error
- Since:
- 1.14
 
 - 
writeLocalFileHeaderprotected void writeLocalFileHeader(ZipEntry ze) throws java.io.IOException Writes the local file header entry- Parameters:
- ze- the entry to write
- Throws:
- java.io.IOException- on error
- Since:
- 1.1
 
 - 
writeDataDescriptorprotected void writeDataDescriptor(ZipEntry ze) throws java.io.IOException Writes the data descriptor entry.- Parameters:
- ze- the entry to write
- Throws:
- java.io.IOException- on error
- Since:
- 1.1
 
 - 
writeCentralFileHeaderprotected void writeCentralFileHeader(ZipEntry ze) throws java.io.IOException Writes the central file header entry.- Parameters:
- ze- the entry to write
- Throws:
- java.io.IOException- on error
- Zip64RequiredException- if the archive's size exceeds 4 GByte and- #setUseZip64is- Zip64Mode.Never.
 
 - 
writeCentralDirectoryEndprotected void writeCentralDirectoryEnd() throws java.io.IOExceptionWrites the "End of central dir record".- Throws:
- java.io.IOException- on error
- Zip64RequiredException- if the archive's size exceeds 4 GByte or there are more than 65535 entries inside the archive and- #setUseZip64is- Zip64Mode.Never.
 
 - 
toDosTime@Deprecated protected static ZipLong toDosTime(java.util.Date time) Deprecated.use ZipUtil#toDosTimeConvert a Date object to a DOS date/time field.- Parameters:
- time- the- Dateto convert
- Returns:
- the date as a ZipLong
- Since:
- 1.1
 
 - 
toDosTime@Deprecated protected static byte[] toDosTime(long t) Deprecated.use ZipUtil#toDosTimeConvert a Date object to a DOS date/time field.Stolen from InfoZip's fileio.c- Parameters:
- t- number of milliseconds since the epoch
- Returns:
- the date as a byte array
- Since:
- 1.26
 
 - 
getBytesprotected byte[] getBytes(java.lang.String name) throws java.util.zip.ZipExceptionRetrieve the bytes for the given String in the encoding set for this Stream.- Parameters:
- name- the string to get bytes from
- Returns:
- the bytes as a byte array
- Throws:
- java.util.zip.ZipException- on error
- Since:
- 1.3
 
 - 
writeZip64CentralDirectoryprotected void writeZip64CentralDirectory() throws java.io.IOExceptionWrites the "ZIP64 End of central dir record" and "ZIP64 End of central dir locator".- Throws:
- java.io.IOException- on error
 
 - 
writeOutprotected final void writeOut(byte[] data) throws java.io.IOExceptionWrite bytes to output or random access file.- Parameters:
- data- the byte array to write
- Throws:
- java.io.IOException- on error
- Since:
- 1.14
 
 - 
writeOutprotected final void writeOut(byte[] data, int offset, int length) throws java.io.IOExceptionWrite bytes to output or random access file.- Parameters:
- data- the byte array to write
- offset- the start position to write from
- length- the number of bytes to write
- Throws:
- java.io.IOException- on error
- Since:
- 1.14
 
 - 
adjustToLong@Deprecated protected static long adjustToLong(int i) Deprecated.use ZipUtil#adjustToLongAssumes a negative integer really is a positive integer that has wrapped around and re-creates the original value.- Parameters:
- i- the value to treat as unsigned int.
- Returns:
- the unsigned int as a long.
- Since:
- 1.34
 
 
- 
 
-