Class X000A_NTFS

java.lang.Object
org.apache.commons.compress.archivers.zip.X000A_NTFS
All Implemented Interfaces:
ZipExtraField

public class X000A_NTFS extends Object implements ZipExtraField
NTFS extra field that was thought to store various attributes but in reality only stores timestamps.
    4.5.5 -NTFS Extra Field (0x000a):

       The following is the layout of the NTFS attributes
       "extra" block. (Note: At this time the Mtime, Atime
       and Ctime values MAY be used on any WIN32 system.)

       Note: all fields stored in Intel low-byte/high-byte order.

         Value      Size       Description
         -----      ----       -----------
 (NTFS)  0x000a     2 bytes    Tag for this "extra" block type
         TSize      2 bytes    Size of the total "extra" block
         Reserved   4 bytes    Reserved for future use
         Tag1       2 bytes    NTFS attribute tag value #1
         Size1      2 bytes    Size of attribute #1, in bytes
         (var)      Size1      Attribute #1 data
          .
          .
          .
          TagN       2 bytes    NTFS attribute tag value #N
          SizeN      2 bytes    Size of attribute #N, in bytes
          (var)      SizeN      Attribute #N data

        For NTFS, values for Tag1 through TagN are as follows:
        (currently only one set of attributes is defined for NTFS)

          Tag        Size       Description
          -----      ----       -----------
          0x0001     2 bytes    Tag for attribute #1
          Size1      2 bytes    Size of attribute #1, in bytes
          Mtime      8 bytes    File last modification time
          Atime      8 bytes    File last access time
          Ctime      8 bytes    File creation time
 
Since:
1.11
  • Field Details

  • Constructor Details

    • X000A_NTFS

      public X000A_NTFS()
  • Method Details

    • getHeaderId

      public ZipShort getHeaderId()
      The Header-ID.
      Specified by:
      getHeaderId in interface ZipExtraField
      Returns:
      the value for the header id for this extrafield
    • getLocalFileDataLength

      public ZipShort getLocalFileDataLength()
      Length of the extra field in the local file data - without Header-ID or length specifier.
      Specified by:
      getLocalFileDataLength in interface ZipExtraField
      Returns:
      a ZipShort for the length of the data of this extra field
    • getCentralDirectoryLength

      public ZipShort getCentralDirectoryLength()
      Length of the extra field in the local file data - without Header-ID or length specifier.

      For X5455 the central length is often smaller than the local length, because central cannot contain access or create timestamps.

      Specified by:
      getCentralDirectoryLength in interface ZipExtraField
      Returns:
      a ZipShort for the length of the data of this extra field
    • getLocalFileDataData

      public byte[] getLocalFileDataData()
      The actual data to put into local file data - without Header-ID or length specifier.
      Specified by:
      getLocalFileDataData in interface ZipExtraField
      Returns:
      get the data
    • getCentralDirectoryData

      public byte[] getCentralDirectoryData()
      The actual data to put into central directory data - without Header-ID or length specifier.
      Specified by:
      getCentralDirectoryData in interface ZipExtraField
      Returns:
      the central directory data
    • parseFromLocalFileData

      public void parseFromLocalFileData(byte[] data, int offset, int length) throws ZipException
      Populate data from this array as if it was in local file data.
      Specified by:
      parseFromLocalFileData in interface ZipExtraField
      Parameters:
      data - an array of bytes
      offset - the start offset
      length - the number of bytes in the array from offset
      Throws:
      ZipException - on error
    • parseFromCentralDirectoryData

      public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) throws ZipException
      Doesn't do anything special since this class always uses the same parsing logic for both central directory and local file data.
      Specified by:
      parseFromCentralDirectoryData in interface ZipExtraField
      Parameters:
      buffer - the buffer to read data from
      offset - offset into buffer to read data
      length - the length of data
      Throws:
      ZipException - on error
    • getModifyTime

      public ZipEightByteInteger getModifyTime()
      Returns the "File last modification time" of this zip entry as a ZipEightByteInteger object, or ZipEightByteInteger.ZERO if no such timestamp exists in the zip entry.
      Returns:
      File last modification time
    • getAccessTime

      public ZipEightByteInteger getAccessTime()
      Returns the "File last access time" of this zip entry as a ZipEightByteInteger object, or ZipEightByteInteger.ZERO if no such timestamp exists in the zip entry.
      Returns:
      File last access time
    • getCreateTime

      public ZipEightByteInteger getCreateTime()
      Returns the "File creation time" of this zip entry as a ZipEightByteInteger object, or ZipEightByteInteger.ZERO if no such timestamp exists in the zip entry.
      Returns:
      File creation time
    • getModifyJavaTime

      public Date getModifyJavaTime()
      Returns the modify time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
      Returns:
      modify time as java.util.Date or null.
    • getAccessJavaTime

      public Date getAccessJavaTime()
      Returns the access time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
      Returns:
      access time as java.util.Date or null.
    • getCreateJavaTime

      public Date getCreateJavaTime()
      Returns the create time as a a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
      Returns:
      create time as java.util.Date or null.
    • setModifyTime

      public void setModifyTime(ZipEightByteInteger t)
      Sets the File last modification time of this zip entry using a ZipEightByteInteger object.
      Parameters:
      t - ZipEightByteInteger of the modify time
    • setAccessTime

      public void setAccessTime(ZipEightByteInteger t)
      Sets the File last access time of this zip entry using a ZipEightByteInteger object.
      Parameters:
      t - ZipEightByteInteger of the access time
    • setCreateTime

      public void setCreateTime(ZipEightByteInteger t)
      Sets the File creation time of this zip entry using a ZipEightByteInteger object.
      Parameters:
      t - ZipEightByteInteger of the create time
    • setModifyJavaTime

      public void setModifyJavaTime(Date d)
      Sets the modify time as a java.util.Date of this zip entry.
      Parameters:
      d - modify time as java.util.Date
    • setAccessJavaTime

      public void setAccessJavaTime(Date d)
      Sets the access time as a java.util.Date of this zip entry.
      Parameters:
      d - access time as java.util.Date
    • setCreateJavaTime

      public void setCreateJavaTime(Date d)

      Sets the create time as a java.util.Date of this zip entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).

      Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

      Parameters:
      d - create time as java.util.Date
    • toString

      public String toString()
      Returns a String representation of this class useful for debugging purposes.
      Overrides:
      toString in class Object
      Returns:
      A String representation of this class useful for debugging purposes.
    • equals

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

      public int hashCode()
      Overrides:
      hashCode in class Object
    • reset

      private void reset()
      Reset state back to newly constructed state. Helps us make sure parse() calls always generate clean results.
    • readTimeAttr

      private void readTimeAttr(byte[] data, int offset, int length)
    • dateToZip

      private static ZipEightByteInteger dateToZip(Date d)
    • zipToDate

      private static Date zipToDate(ZipEightByteInteger z)