/** * Put an entry on the output stream. This writes the entry's header record and positions the * output stream for writing the contents of the entry. Once this method is called, the stream is * ready for calls to write() to write the entry's contents. Once the contents are written, * closeEntry() <B>MUST be called to ensure that all buffered data is completely written to the * output stream. * * @param entry The TarEntry to be written to the archive. */ public void putNextEntry(TarEntry entry) throws IOException { StringBuffer name = entry.getHeader().name; // NOTE // This check is not adequate, because the maximum file length that // can be placed into a POSIX (ustar) header depends on the precise // locations of the path elements (slashes) within the file's full // pathname. For this reason, writeEntryHeader() can still throw an // InvalidHeaderException if the file's full pathname will not fit // in the header. if ((entry.isUnixTarFormat() && name.length() > TarHeader.NAMELEN) || (!entry.isUnixTarFormat() && name.length() > (TarHeader.NAMELEN + TarHeader.PREFIXLEN))) { throw new InvalidHeaderException( "file name '" + name + "' is too long ( " + name.length() + " > " + (entry.isUnixTarFormat() ? TarHeader.NAMELEN : (TarHeader.NAMELEN + TarHeader.PREFIXLEN)) + " bytes )"); } entry.writeEntryHeader(this.recordBuf); this.buffer.writeRecord(this.recordBuf); this.currBytes = 0; if (entry.isDirectory()) this.currSize = 0; else this.currSize = entry.getSize(); }
/** * Writes the next tar entry header on the stream * * @param entry * @throws IOException */ public void putNextEntry(TarEntry entry) throws IOException { closeCurrentEntry(); byte[] header = new byte[TarConstants.HEADER_BLOCK]; entry.writeEntryHeader(header); write(header); currentEntry = entry; }