Class SevenZFile

  • All Implemented Interfaces:
    Closeable, AutoCloseable


    public class SevenZFile
    extends Object
    implements Closeable
    Reads a 7z file, using RandomAccessFile under the covers.

    The 7z file format is a flexible container that can contain many compression and encryption types, but at the moment only only Copy, LZMA, LZMA2, BZIP2, Deflate and AES-256 + SHA-256 are supported.

    The format is very Windows/Intel specific, so it uses little-endian byte order, doesn't store user/group or permission bits, and represents times using NTFS timestamps (100 nanosecond units since 1 January 1601). Hence the official tools recommend against using it for backup purposes on *nix, and recommend .tar.7z or .tar.lzma or .tar.xz instead.

    Both the header and file contents may be compressed and/or encrypted. With both encrypted, neither file names nor file contents can be read, but the use of encryption isn't plausibly deniable.

    Since:
    1.6
    • Constructor Summary

      Constructors

      Constructor and Description
      SevenZFile(File filename)
      Reads a file as unecrypted 7z archive
      SevenZFile(File filename, byte[] password)
      Reads a file as 7z archive
    • Method Summary

      Modifier and Type Method and Description
      void close()
      Closes the archive.
      SevenZArchiveEntry getNextEntry()
      Returns the next Archive Entry in this archive.
      static boolean matches(byte[] signature, int length)
      Checks if the signature matches what is expected for a 7z file.
      int read()
      Reads a byte of data.
      int read(byte[] b)
      Reads data into an array of bytes.
      int read(byte[] b, int off, int len)
      Reads data into an array of bytes.
    • Constructor Detail

      • SevenZFile

        public SevenZFile(File filename,
                          byte[] password)
                   throws IOException
        Reads a file as 7z archive
        Parameters:
        filename - the file to read
        password - optional password if the archive is encrypted - the byte array is supposed to be the UTF16-LE encoded representation of the password.
        Throws:
        IOException - if reading the archive fails
      • SevenZFile

        public SevenZFile(File filename)
                   throws IOException
        Reads a file as unecrypted 7z archive
        Parameters:
        filename - the file to read
        Throws:
        IOException - if reading the archive fails
    • Method Detail

      • getNextEntry

        public SevenZArchiveEntry getNextEntry()
                                        throws IOException
        Returns the next Archive Entry in this archive.
        Returns:
        the next entry, or null if there are no more entries
        Throws:
        IOException - if the next entry could not be read
      • read

        public int read()
                 throws IOException
        Reads a byte of data.
        Returns:
        the byte read, or -1 if end of input is reached
        Throws:
        IOException - if an I/O error has occurred
      • read

        public int read(byte[] b)
                 throws IOException
        Reads data into an array of bytes.
        Parameters:
        b - the array to write data to
        Returns:
        the number of bytes read, or -1 if end of input is reached
        Throws:
        IOException - if an I/O error has occurred
      • read

        public int read(byte[] b,
                        int off,
                        int len)
                 throws IOException
        Reads data into an array of bytes.
        Parameters:
        b - the array to write data to
        off - offset into the buffer to start filling at
        len - of bytes to read
        Returns:
        the number of bytes read, or -1 if end of input is reached
        Throws:
        IOException - if an I/O error has occurred
      • matches

        public static boolean matches(byte[] signature,
                                      int length)
        Checks if the signature matches what is expected for a 7z file.
        Parameters:
        signature - the bytes to check
        length - the number of bytes to check
        Returns:
        true, if this is the signature of a 7z archive.
        Since:
        1.8