Class ZipOutputStream
- All Implemented Interfaces:
- Closeable,- Flushable,- AutoCloseable
java.util.zip.ZipOutputStream that 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 RandomAccessFile when 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 DEFLATED entries, this means, you don't need to
 calculate them yourself.  Unfortunately this is not possible for
 the STORED method, here setting the CRC and
 uncompressed size information is required before putNextEntry can 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 ClassesModifier and TypeClassDescriptionstatic final classenum that represents the possible policies for creating Unicode extra fields.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected byte[]This buffer serves as a Deflater.protected static final byte[]central file header signatureprotected static final byte[]data descriptor signatureprotected final DeflaterThis Deflater object is used for output.static final intDefault compression level for deflated entries.static final intCompression method for deflated entries.static final intDeprecated.protected static final byte[]end of central dir signatureprotected static final byte[]local file header signaturestatic final intCompression method for stored entries.Fields inherited from class java.io.FilterOutputStreamout
- 
Constructor SummaryConstructorsConstructorDescriptionZipOutputStream(File file) Creates a new ZIP OutputStream writing to a File.Creates a new ZIP OutputStream filtering the underlying stream.
- 
Method SummaryModifier and TypeMethodDescriptionprotected static longadjustToLong(int i) Deprecated.use ZipUtil#adjustToLongbooleanWhether this stream is able to write the given entry.voidclose()Closes this output stream and releases any system resources associated with the stream.voidWrites all necessary data for this entry.protected final voiddeflate()Writes next block of compressed data to the output stream.voidfinish()Finish writing the archive.voidflush()Flushes this output stream and forces any buffered output bytes to be written out to the stream.protected byte[]Retrieve the bytes for the given String in the encoding set for this Stream.The encoding to use for filenames and the file comment.booleanThis method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).voidputNextEntry(ZipEntry archiveEntry) Put the specified entry into the archive.voidsetComment(String comment) Set the file comment.voidWhether to create Unicode Extra Fields.voidsetEncoding(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 ZipLongDeprecated.use ZipUtil#toDosTimevoidwrite(byte[] b, int offset, int length) Writes bytes to ZIP entry.voidwrite(int b) Writes a byte to ZIP entry.protected voidWrites the "End of central dir record".protected voidWrites the central file header entry.protected voidWrites the data descriptor entry.protected voidWrites the local file header entryprotected final voidwriteOut(byte[] data) Write bytes to output or random access file.protected final voidwriteOut(byte[] data, int offset, int length) Write bytes to output or random access file.protected voidWrites the "ZIP64 End of central dir record" and "ZIP64 End of central dir locator".Methods inherited from class java.io.FilterOutputStreamwriteMethods inherited from class java.io.OutputStreamnullOutputStream
- 
Field Details- 
DEFLATEDpublic static final int DEFLATEDCompression method for deflated entries.- Since:
- 1.1
- See Also:
 
- 
DEFAULT_COMPRESSIONpublic static final int DEFAULT_COMPRESSIONDefault compression level for deflated entries.- Since:
- Ant 1.7
- See Also:
 
- 
STOREDpublic static final int STOREDCompression method for stored entries.- Since:
- 1.1
- See Also:
 
- 
EFS_FLAGDeprecated.useGeneralPurposeBit.UFT8_NAMES_FLAGinsteadGeneral purpose flag, which indicates that filenames are written in utf-8.- See Also:
 
- 
defThis Deflater object is used for output.
- 
bufprotected byte[] bufThis 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_SIGlocal file header signature- Since:
- 1.1
 
- 
DD_SIGprotected static final byte[] DD_SIGdata descriptor signature- Since:
- 1.1
 
- 
CFH_SIGprotected static final byte[] CFH_SIGcentral file header signature- Since:
- 1.1
 
- 
EOCD_SIGprotected static final byte[] EOCD_SIGend of central dir signature- Since:
- 1.1
 
 
- 
- 
Constructor Details- 
ZipOutputStreamCreates a new ZIP OutputStream filtering the underlying stream.- Parameters:
- out- the outputstream to zip
- Since:
- 1.1
 
- 
ZipOutputStreamCreates a new ZIP OutputStream writing to a File. Will use random access if possible.- Parameters:
- file- the file to zip to
- Throws:
- IOException- on error
- Since:
- 1.14
 
 
- 
- 
Method Details- 
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
 
- 
setEncodingThe 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
 
- 
getEncodingThe 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
 
- 
setCreateUnicodeExtraFieldsWhether 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
 
- 
setUseZip64Whether 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
 
- 
finishFinish writing the archive.- 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.
- IOException
 
- 
closeEntryWrites all necessary data for this entry.- Throws:
- 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
 
- 
putNextEntryPut the specified entry into the archive.- 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.
- IOException
 
- 
setCommentSet 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:
- 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
 
- 
canWriteEntryDataWhether 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
 
- 
writeWrites a byte to ZIP entry.- Overrides:
- writein class- FilterOutputStream
- Parameters:
- b- the byte to write
- Throws:
- IOException- on error
- Since:
- Ant 1.10.10
 
- 
writeWrites bytes to ZIP entry.- Overrides:
- writein class- FilterOutputStream
- Parameters:
- b- the byte array to write
- offset- the start position to write from
- length- the number of bytes to write
- Throws:
- IOException- on error
 
- 
closeCloses this output stream and releases any system resources associated with the stream.- Specified by:
- closein interface- AutoCloseable
- Specified by:
- closein interface- Closeable
- Overrides:
- closein class- FilterOutputStream
- Throws:
- 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.
 
- 
flushFlushes this output stream and forces any buffered output bytes to be written out to the stream.- Specified by:
- flushin interface- Flushable
- Overrides:
- flushin class- FilterOutputStream
- Throws:
- IOException- if an I/O error occurs.
 
- 
deflateWrites next block of compressed data to the output stream.- Throws:
- IOException- on error
- Since:
- 1.14
 
- 
writeLocalFileHeaderWrites the local file header entry- Parameters:
- ze- the entry to write
- Throws:
- IOException- on error
- Since:
- 1.1
 
- 
writeDataDescriptorWrites the data descriptor entry.- Parameters:
- ze- the entry to write
- Throws:
- IOException- on error
- Since:
- 1.1
 
- 
writeCentralFileHeaderWrites the central file header entry.- Parameters:
- ze- the entry to write
- Throws:
- IOException- on error
- Zip64RequiredException- if the archive's size exceeds 4 GByte and- #setUseZip64is- Zip64Mode.Never.
 
- 
writeCentralDirectoryEndWrites the "End of central dir record".- Throws:
- 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.
 
- 
toDosTimeDeprecated.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
 
- 
toDosTimeDeprecated.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
 
- 
getBytesRetrieve 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:
- ZipException- on error
- Since:
- 1.3
 
- 
writeZip64CentralDirectoryWrites the "ZIP64 End of central dir record" and "ZIP64 End of central dir locator".- Throws:
- IOException- on error
 
- 
writeOutWrite bytes to output or random access file.- Parameters:
- data- the byte array to write
- Throws:
- IOException- on error
- Since:
- 1.14
 
- 
writeOutWrite 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:
- IOException- on error
- Since:
- 1.14
 
- 
adjustToLongDeprecated.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
 
 
- 
GeneralPurposeBit.UFT8_NAMES_FLAGinstead