Package org.apache.commons.compress.archivers.cpio

# Class CpioArchiveOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.apache.commons.compress.archivers.ArchiveOutputStream<CpioArchiveEntry>
org.apache.commons.compress.archivers.cpio.CpioArchiveOutputStream

All Implemented Interfaces:
  `Closeable`, `Flushable`, `AutoCloseable`, `CpioConstants`

public class CpioArchiveOutputStream extends ArchiveOutputStream<CpioArchiveEntry> implements CpioConstants
CpioArchiveOutputStream is a stream for writing CPIO streams. All formats of CPIO are supported (old ASCII, old binary, new portable format and the new portable format with CRC).

An entry can be written by creating an instance of CpioArchiveEntry and fill it with the necessary values and put it into the CPIO stream. Afterwards write the contents of the file into the CPIO stream. Either close the stream by calling finish() or put a next entry into the cpio stream.

     CpioArchiveOutputStream out = new CpioArchiveOutputStream(
             new FileOutputStream(new File("test.cpio")));
     CpioArchiveEntry entry = new CpioArchiveEntry();
     entry.setName("testfile");
     String contents = "12345";
     entry.setFileSize(contents.length());
     entry.setMode(CpioConstants.C_ISREG); // regular file
     ... set other attributes, e.g. time, number of links
     out.putArchiveEntry(entry);
     out.write(testContents.getBytes());
     out.close();

Note: This implementation should be compatible to cpio 2.5

This class uses mutable fields and is not considered threadsafe.

based on code from the jRPM project (jrpm.sourceforge.net)

- ## Field Summary

  ### Fields inherited from class java.io.FilterOutputStream

  `out`

  ### Fields inherited from interface org.apache.commons.compress.archivers.cpio.CpioConstants

  `BLOCK_SIZE, C_IRGRP, C_IROTH, C_IRUSR, C_ISBLK, C_ISCHR, C_ISDIR, C_ISFIFO, C_ISGID, C_ISLNK, C_ISNWK, C_ISREG, C_ISSOCK, C_ISUID, C_ISVTX, C_IWGRP, C_IWOTH, C_IWUSR, C_IXGRP, C_IXOTH, C_IXUSR, CPIO_TRAILER, FORMAT_NEW, FORMAT_NEW_CRC, FORMAT_NEW_MASK, FORMAT_OLD_ASCII, FORMAT_OLD_BINARY, FORMAT_OLD_MASK, MAGIC_NEW, MAGIC_NEW_CRC, MAGIC_OLD_ASCII, MAGIC_OLD_BINARY, S_IFMT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CpioArchiveOutputStream(OutputStream out)`
  Constructs the cpio output stream.
  `CpioArchiveOutputStream(OutputStream out, short format)`
  Constructs the cpio output stream with a specified format, a blocksize of `BLOCK_SIZE` and using ASCII as the file name encoding.
  `CpioArchiveOutputStream(OutputStream out, short format, int blockSize)`
  Constructs the cpio output stream with a specified format using ASCII as the file name encoding.
  `CpioArchiveOutputStream(OutputStream out, short format, int blockSize, String encoding)`
  Constructs the cpio output stream with a specified format using ASCII as the file name encoding.
  `CpioArchiveOutputStream(OutputStream out, String encoding)`
  Constructs the cpio output stream.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes the CPIO output stream as well as the stream being filtered.
  `void`
  `closeArchiveEntry()`
  Closes the archive entry, writing any trailer information that may be required.
  `CpioArchiveEntry`
  `createArchiveEntry(File inputFile, String entryName)`
  Creates a new CpioArchiveEntry.
  `CpioArchiveEntry`
  `createArchiveEntry(Path inputPath, String entryName, LinkOption... options)`
  Creates a new CpioArchiveEntry.
  `void`
  `finish()`
  Finishes writing the contents of the CPIO output stream without closing the underlying stream.
  `void`
  `putArchiveEntry(CpioArchiveEntry entry)`
  Begins writing a new CPIO file entry and positions the stream to the start of the entry data.
  `void`
  `write(byte[] b, int off, int len)`
  Writes an array of bytes to the current CPIO entry data.

  ### Methods inherited from class org.apache.commons.compress.archivers.ArchiveOutputStream

  `canWriteEntryData, checkFinished, checkOpen, count, count, getBytesWritten, getCount, isClosed, isFinished, write`

  ### Methods inherited from class java.io.FilterOutputStream

  `flush, write`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### CpioArchiveOutputStream

    public CpioArchiveOutputStream(OutputStream out)
    Constructs the cpio output stream. The format for this CPIO stream is the "new" format using ASCII encoding for file names
    Parameters:
      `out` - The cpio stream

  - ### CpioArchiveOutputStream

    public CpioArchiveOutputStream(OutputStream out, short format)
    Constructs the cpio output stream with a specified format, a blocksize of `BLOCK_SIZE` and using ASCII as the file name encoding.
    Parameters:
      `out` - The cpio stream
      `format` - The format of the stream

  - ### CpioArchiveOutputStream

    public CpioArchiveOutputStream(OutputStream out, short format, int blockSize)
    Constructs the cpio output stream with a specified format using ASCII as the file name encoding.
    Parameters:
      `out` - The cpio stream
      `format` - The format of the stream
      `blockSize` - The block size of the archive.
    Since:
      1.1

  - ### CpioArchiveOutputStream

    public CpioArchiveOutputStream(OutputStream out, short format, int blockSize, String encoding)
    Constructs the cpio output stream with a specified format using ASCII as the file name encoding.
    Parameters:
      `out` - The cpio stream
      `format` - The format of the stream
      `blockSize` - The block size of the archive.
      `encoding` - The encoding of file names to write - use null for the platform's default.
    Since:
      1.6

  - ### CpioArchiveOutputStream

    public CpioArchiveOutputStream(OutputStream out, String encoding)
    Constructs the cpio output stream. The format for this CPIO stream is the "new" format.
    Parameters:
      `out` - The cpio stream
      `encoding` - The encoding of file names to write - use null for the platform's default.
    Since:
      1.6

- ## Method Details

  - ### close

    public void close() throws IOException
    Closes the CPIO output stream as well as the stream being filtered.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred

  - ### closeArchiveEntry

    public void closeArchiveEntry() throws IOException
    Description copied from class: `ArchiveOutputStream`
    Closes the archive entry, writing any trailer information that may be required.
    Specified by:
      `closeArchiveEntry` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Throws:
      `IOException` - if an I/O error occurs

  - ### createArchiveEntry

    public CpioArchiveEntry createArchiveEntry(File inputFile, String entryName) throws IOException
    Creates a new CpioArchiveEntry. The entryName must be an ASCII encoded string.
    Specified by:
      `createArchiveEntry` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Parameters:
      `inputFile` - the file to create the entry from
      `entryName` - name to use for the entry
    Returns:
      the ArchiveEntry set up with details from the file
    Throws:
      `IOException` - if an I/O error occurs
    See Also:
      - `ArchiveOutputStream.createArchiveEntry(java.io.File, String)`

  - ### createArchiveEntry

    public CpioArchiveEntry createArchiveEntry(Path inputPath, String entryName, LinkOption... options) throws IOException
    Creates a new CpioArchiveEntry. The entryName must be an ASCII encoded string.
    Overrides:
      `createArchiveEntry` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Parameters:
      `inputPath` - the file to create the entry from
      `entryName` - name to use for the entry
      `options` - options indicating how symbolic links are handled.
    Returns:
      the ArchiveEntry set up with details from the file
    Throws:
      `IOException` - if an I/O error occurs
    See Also:
      - `ArchiveOutputStream.createArchiveEntry(java.io.File, String)`

  - ### finish

    public void finish() throws IOException
    Finishes writing the contents of the CPIO output stream without closing the underlying stream. Use this method when applying multiple filters in succession to the same output stream.
    Overrides:
      `finish` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Throws:
      `IOException` - if an I/O exception has occurred or if a CPIO file error has occurred

  - ### putArchiveEntry

    public void putArchiveEntry(CpioArchiveEntry entry) throws IOException
    Begins writing a new CPIO file entry and positions the stream to the start of the entry data. Closes the current entry if still active. The current time will be used if the entry has no set modification time and the default header format will be used if no other format is specified in the entry.
    Specified by:
      `putArchiveEntry` in class `ArchiveOutputStream<CpioArchiveEntry>`
    Parameters:
      `entry` - the CPIO cpioEntry to be written
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred
      `ClassCastException` - if entry is not an instance of CpioArchiveEntry

  - ### write

    public void write(byte[] b, int off, int len) throws IOException
    Writes an array of bytes to the current CPIO entry data. This method will block until all the bytes are written.
    Overrides:
      `write` in class `FilterOutputStream`
    Parameters:
      `b` - the data to be written
      `off` - the start offset in the data
      `len` - the number of bytes that are written
    Throws:
      `IOException` - if an I/O error has occurred or if a CPIO file error has occurred