Class TarEntry

java.lang.Object
org.jboss.shrinkwrap.impl.base.io.tar.TarEntry
All Implemented Interfaces:
Cloneable

public class TarEntry extends Object implements Cloneable
This class represents an entry in a Tar archive. It consists of the entry's header, as well as the entry's File. Entries can be instantiated in one of three ways, depending on how they are to be used.

TarEntries that are created from the header bytes read from an archive are instantiated with the TarEntry( byte[] ) constructor. These entries will be used when extracting from or listing the contents of an archive. These entries have their header filled in using the header bytes. They also set the File to null, since they reference an archive entry not a file.

TarEntries that are created from Files that are to be written into an archive are instantiated with the TarEntry( File ) constructor. These entries have their header filled in using the File's information. They also keep a reference to the File for convenience when writing entries.

Finally, TarEntries can be constructed from nothing but a name. This allows the programmer to construct the entry by hand, for instance when only an InputStream is available for writing to the archive, and the header information is constructed from other information. In this case the header fields are set to defaults and the File is set to null.


 Original Unix Tar Header:

 Field  Field     Field
 Width  Name      Meaning
 -----  --------- ---------------------------
   100  name      name of file
     8  mode      file mode
     8  uid       owner user ID
     8  gid       owner group ID
    12  size      length of file in bytes
    12  mtime     modify time of file
     8  chksum    checksum for header
     1  link      indicator for links
   100  linkname  name of linked file

 

 POSIX "ustar" Style Tar Header:

 Field  Field     Field
 Width  Name      Meaning
 -----  --------- ---------------------------
   100  name      name of file
     8  mode      file mode
     8  uid       owner user ID
     8  gid       owner group ID
    12  size      length of file in bytes
    12  mtime     modify time of file
     8  chksum    checksum for header
     1  typeflag  type of file
   100  linkname  name of linked file
     6  magic     USTAR indicator
     2  version   USTAR version
    32  uname     owner user name
    32  gname     owner group name
     8  devmajor  device major number
     8  devminor  device minor number
   155  prefix    prefix for file name

 struct posix_header
   {                     byte offset
   char name[100];            0
   char mode[8];            100
   char uid[8];             108
   char gid[8];             116
   char size[12];           124
   char mtime[12];          136
   char chksum[8];          148
   char typeflag;           156
   char linkname[100];      157
   char magic[6];           257
   char version[2];         263
   char uname[32];          265
   char gname[32];          297
   char devmajor[8];        329
   char devminor[8];        337
   char prefix[155];        345
   };                       500

 
Note that while the class does recognize GNU formatted headers, it does not perform proper processing of GNU archives. I hope to add the GNU support someday. Directory "size" fix contributed by: Bert Becker invalid input: '<'becker@informatik.hu-berlin.de>
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected File
    If this entry represents a File, this references it.
    protected boolean
    Set to true if this is a GNU 'ustar' format entry.
    protected TarHeader
    This is the entry's header information.
    protected boolean
    Set to true if this is a "old-unix" format entry.
    protected boolean
    Set to true if this is a 'ustar' format entry.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    The default constructor is protected for use only by subclasses.
     
    TarEntry(byte[] headerBuf)
    Construct an entry from an archive's header bytes.
     
    TarEntry(File file)
    Construct an entry for a file.
     
    Construct an entry with only a name.
  • Method Summary

    Modifier and Type
    Method
    Description
    Clone the entry.
    long
    computeCheckSum(byte[] buf)
    Compute the checksum of a tar entry header.
    boolean
     
    boolean
    Determine if the two entries are equal.
    If this entry represents a file, and the file is a directory, return an array of TarEntries for this entry's children.
    Get this entry's file.
    void
    Fill in a TarHeader with information from a File.
    int
    Get this entry's group id.
    Get this entry's group name.
    Get this entry's header.
    Set this entry's modification time.
    Get this entry's name.
    long
    Get this entry's file size.
    int
    Get this entry's user id.
    Get this entry's user name.
    int
    Value equality done by name only
    private void
    Initialization code common to all constructors.
    boolean
    Determine if the given entry is a descendant of this entry.
    boolean
    Return whether or not this entry represents a directory.
    boolean
    Returns true if this entry's header is in the GNU 'ustar' format.
    boolean
    Returns true if this entry's header is in the old "unix-tar" format.
    boolean
    Returns true if this entry's header is in "ustar" format.
    void
    Fill in a TarHeader given only the entry's name.
    void
    parseTarHeader(TarHeader hdr, byte[] headerBuf)
    Parse an entry's TarHeader information from a header buffer.
    void
    Sets this entry's header format to GNU "ustar".
    void
    setGroupId(int groupId)
    Set this entry's group id.
    void
    setGroupName(String groupName)
    Set this entry's group name.
    void
    setIds(int userId, int groupId)
    Convenience method to set this entry's group and user ids.
    void
    setModTime(long time)
    Set this entry's modification time.
    void
    Set this entry's modification time.
    void
    Set this entry's name.
    void
    setNames(String userName, String groupName)
    Convenience method to set this entry's group and user names.
    void
    setSize(long size)
    Set this entry's file size.
    void
    Sets this entry's header format to "unix-style".
    void
    setUserId(int userId)
    Set this entry's user id.
    void
    setUserName(String userName)
    Set this entry's user name.
    void
    Sets this entry's header format to "ustar".
     
    void
    writeEntryHeader(byte[] outbuf)
    Write an entry's header information to a header buffer.

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • file

      protected File file
      If this entry represents a File, this references it.
    • unixFormat

      protected boolean unixFormat
      Set to true if this is a "old-unix" format entry.
    • ustarFormat

      protected boolean ustarFormat
      Set to true if this is a 'ustar' format entry.
    • gnuFormat

      protected boolean gnuFormat
      Set to true if this is a GNU 'ustar' format entry.
  • Constructor Details

    • TarEntry

      protected TarEntry()
      The default constructor is protected for use only by subclasses.
    • TarEntry

      public TarEntry(String name)
      Construct an entry with only a name. This allows the programmer to construct the entry's header "by hand". File is set to null.
    • TarEntry

      public TarEntry(File file) throws InvalidHeaderException
      Construct an entry for a file. File is set to file, and the header is constructed from information from the file.
      Parameters:
      file - The file that the entry represents.
      Throws:
      InvalidHeaderException
    • TarEntry

      public TarEntry(byte[] headerBuf) throws InvalidHeaderException
      Construct an entry from an archive's header bytes. File is set to null.
      Parameters:
      headerBuf - The header bytes from a tar archive entry.
      Throws:
      InvalidHeaderException
  • Method Details

    • initialize

      private void initialize()
      Initialization code common to all constructors.
    • clone

      public Object clone()
      Clone the entry.
      Overrides:
      clone in class Object
    • isUSTarFormat

      public boolean isUSTarFormat()
      Returns true if this entry's header is in "ustar" format.
      Returns:
      True if the entry's header is in "ustar" format.
    • setUSTarFormat

      public void setUSTarFormat()
      Sets this entry's header format to "ustar".
    • isGNUTarFormat

      public boolean isGNUTarFormat()
      Returns true if this entry's header is in the GNU 'ustar' format.
      Returns:
      True if the entry's header is in the GNU 'ustar' format.
    • setGNUTarFormat

      public void setGNUTarFormat()
      Sets this entry's header format to GNU "ustar".
    • isUnixTarFormat

      public boolean isUnixTarFormat()
      Returns true if this entry's header is in the old "unix-tar" format.
      Returns:
      True if the entry's header is in the old "unix-tar" format.
    • setUnixTarFormat

      public void setUnixTarFormat()
      Sets this entry's header format to "unix-style".
    • equals

      public boolean equals(TarEntry it)
      Determine if the two entries are equal. Equality is determined by the header names being equal.
      Returns:
      it Entry to be checked for equality.
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Value equality done by name only
      Overrides:
      hashCode in class Object
      See Also:
    • isDescendent

      public boolean isDescendent(TarEntry desc)
      Determine if the given entry is a descendant of this entry. Descendancy is determined by the name of the descendant starting with this entry's name.
      Parameters:
      desc - Entry to be checked as a descendent of this.
      Returns:
      True if entry is a descendant of this.
    • getHeader

      public TarHeader getHeader()
      Get this entry's header.
      Returns:
      This entry's TarHeader.
    • getName

      public String getName()
      Get this entry's name.
      Returns:
      This entry's name.
    • setName

      public void setName(String name)
      Set this entry's name.
      Parameters:
      name - This entry's new name.
    • getUserId

      public int getUserId()
      Get this entry's user id.
      Returns:
      This entry's user id.
    • setUserId

      public void setUserId(int userId)
      Set this entry's user id.
      Parameters:
      userId - This entry's new user id.
    • getGroupId

      public int getGroupId()
      Get this entry's group id.
      Returns:
      This entry's group id.
    • setGroupId

      public void setGroupId(int groupId)
      Set this entry's group id.
      Parameters:
      groupId - This entry's new group id.
    • getUserName

      public String getUserName()
      Get this entry's user name.
      Returns:
      This entry's user name.
    • setUserName

      public void setUserName(String userName)
      Set this entry's user name.
      Parameters:
      userName - This entry's new user name.
    • getGroupName

      public String getGroupName()
      Get this entry's group name.
      Returns:
      This entry's group name.
    • setGroupName

      public void setGroupName(String groupName)
      Set this entry's group name.
      Parameters:
      groupName - This entry's new group name.
    • setIds

      public void setIds(int userId, int groupId)
      Convenience method to set this entry's group and user ids.
      Parameters:
      userId - This entry's new user id.
      groupId - This entry's new group id.
    • setNames

      public void setNames(String userName, String groupName)
      Convenience method to set this entry's group and user names.
      Parameters:
      userName - This entry's new user name.
      groupName - This entry's new group name.
    • setModTime

      public void setModTime(long time)
      Set this entry's modification time. The parameter passed to this method is in "Java time".
      Parameters:
      time - This entry's new modification time.
    • setModTime

      public void setModTime(Date time)
      Set this entry's modification time.
      Parameters:
      time - This entry's new modification time.
    • getModTime

      public Date getModTime()
      Set this entry's modification time.
      Parameters:
      time - This entry's new modification time.
    • getFile

      public File getFile()
      Get this entry's file.
      Returns:
      This entry's file.
    • getSize

      public long getSize()
      Get this entry's file size.
      Returns:
      This entry's file size.
    • setSize

      public void setSize(long size)
      Set this entry's file size.
      Parameters:
      size - This entry's new file size.
    • isDirectory

      public boolean isDirectory()
      Return whether or not this entry represents a directory.
      Returns:
      True if this entry is a directory.
    • getFileTarHeader

      public void getFileTarHeader(TarHeader hdr, File file) throws InvalidHeaderException
      Fill in a TarHeader with information from a File.
      Parameters:
      hdr - The TarHeader to fill in.
      file - The file from which to get the header information.
      Throws:
      InvalidHeaderException
    • getDirectoryEntries

      public TarEntry[] getDirectoryEntries() throws InvalidHeaderException
      If this entry represents a file, and the file is a directory, return an array of TarEntries for this entry's children.
      Returns:
      An array of TarEntry's for this entry's children.
      Throws:
      InvalidHeaderException
    • computeCheckSum

      public long computeCheckSum(byte[] buf)
      Compute the checksum of a tar entry header.
      Parameters:
      buf - The tar entry's header buffer.
      Returns:
      The computed checksum.
    • writeEntryHeader

      public void writeEntryHeader(byte[] outbuf) throws InvalidHeaderException
      Write an entry's header information to a header buffer. This method can throw an InvalidHeaderException
      Parameters:
      outbuf - The tar entry header buffer to fill in.
      Throws:
      InvalidHeaderException - If the name will not fit in the header.
    • parseTarHeader

      public void parseTarHeader(TarHeader hdr, byte[] headerBuf) throws InvalidHeaderException
      Parse an entry's TarHeader information from a header buffer. Old unix-style code contributed by David Mehringer invalid input: '<'dmehring@astro.uiuc.edu>.
      Parameters:
      hdr - The TarHeader to fill in from the buffer information.
      header - The tar entry header buffer to get information from.
      Throws:
      InvalidHeaderException
    • nameTarHeader

      public void nameTarHeader(TarHeader hdr, String name)
      Fill in a TarHeader given only the entry's name.
      Parameters:
      hdr - The TarHeader to fill in.
      name - The tar entry name.
    • toString

      public String toString()
      Overrides:
      toString in class Object