Package org.h2.store

Class FileStore

  • Direct Known Subclasses:
    SecureFileStore

    public class FileStore
    extends java.lang.Object
    This class is an abstraction of a random access file. Each file contains a magic header, and reading / writing is done in blocks. See also SecureFileStore
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static boolean ASSERT  
      private java.lang.ref.Reference<?> autoDeleteReference  
      private boolean checkedWriting  
      private java.nio.channels.FileChannel file  
      private long fileLength  
      private long filePos  
      private DataHandler handler
      The callback object is responsible to check access rights, and free up disk space if required.
      private static java.lang.String HEADER
      The magic file header.
      static int HEADER_LENGTH
      The size of the file header in bytes.
      private java.nio.channels.FileLock lock  
      private java.lang.String mode  
      protected java.lang.String name
      The file name.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected FileStore​(DataHandler handler, java.lang.String name, java.lang.String mode)
      Create a new file using the given settings.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void autoDelete()
      Automatically delete the file once it is no longer in use.
      private void checkPowerOff()  
      private void checkWritingAllowed()  
      void close()
      Close the file.
      void closeAndDeleteSilently()
      Close the file (ignoring exceptions) and delete the file.
      void closeFile()
      Close the file.
      private void closeFileSilently()
      Just close the file, without setting the reference to null.
      void closeSilently()
      Close the file without throwing any exceptions.
      protected byte[] generateSalt()
      Generate the random salt bytes if required.
      long getFilePointer()
      Get the current location of the file pointer.
      void init()
      Initialize the file.
      protected void initKey​(byte[] salt)
      Initialize the key using the given salt.
      long length()
      Get the file size in bytes.
      static FileStore open​(DataHandler handler, java.lang.String name, java.lang.String mode)
      Open a non encrypted file store with the given settings.
      static FileStore open​(DataHandler handler, java.lang.String name, java.lang.String mode, java.lang.String cipher, byte[] key)
      Open an encrypted file store with the given settings.
      static FileStore open​(DataHandler handler, java.lang.String name, java.lang.String mode, java.lang.String cipher, byte[] key, int keyIterations)
      Open an encrypted file store with the given settings.
      void openFile()
      Re-open the file.
      void readFully​(byte[] b, int off, int len)
      Read a number of bytes.
      void readFullyDirect​(byte[] b, int off, int len)
      Read a number of bytes without decrypting.
      void releaseLock()
      Release the file lock.
      void seek​(long pos)
      Go to the specified file location.
      void setCheckedWriting​(boolean value)  
      void setLength​(long newLength)
      Set the length of the file.
      void stopAutoDelete()
      No longer automatically delete the file once it is no longer in use.
      void sync()
      Call fsync.
      private static void trace​(java.lang.String method, java.lang.String fileName, java.lang.Object o)  
      boolean tryLock()
      Try to lock the file.
      void write​(byte[] b, int off, int len)
      Write a number of bytes.
      protected void writeDirect​(byte[] b, int off, int len)
      Write a number of bytes without encrypting.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • HEADER_LENGTH

        public static final int HEADER_LENGTH
        The size of the file header in bytes.
        See Also:
        Constant Field Values
      • HEADER

        private static final java.lang.String HEADER
        The magic file header.
      • ASSERT

        private static final boolean ASSERT
      • name

        protected java.lang.String name
        The file name.
      • handler

        private final DataHandler handler
        The callback object is responsible to check access rights, and free up disk space if required.
      • file

        private java.nio.channels.FileChannel file
      • filePos

        private long filePos
      • fileLength

        private long fileLength
      • autoDeleteReference

        private java.lang.ref.Reference<?> autoDeleteReference
      • checkedWriting

        private boolean checkedWriting
      • mode

        private final java.lang.String mode
      • lock

        private java.nio.channels.FileLock lock
    • Constructor Detail

      • FileStore

        protected FileStore​(DataHandler handler,
                            java.lang.String name,
                            java.lang.String mode)
        Create a new file using the given settings.
        Parameters:
        handler - the callback object
        name - the file name
        mode - the access mode ("r", "rw", "rws", "rwd")
    • Method Detail

      • open

        public static FileStore open​(DataHandler handler,
                                     java.lang.String name,
                                     java.lang.String mode)
        Open a non encrypted file store with the given settings.
        Parameters:
        handler - the data handler
        name - the file name
        mode - the access mode (r, rw, rws, rwd)
        Returns:
        the created object
      • open

        public static FileStore open​(DataHandler handler,
                                     java.lang.String name,
                                     java.lang.String mode,
                                     java.lang.String cipher,
                                     byte[] key)
        Open an encrypted file store with the given settings.
        Parameters:
        handler - the data handler
        name - the file name
        mode - the access mode (r, rw, rws, rwd)
        cipher - the name of the cipher algorithm
        key - the encryption key
        Returns:
        the created object
      • open

        public static FileStore open​(DataHandler handler,
                                     java.lang.String name,
                                     java.lang.String mode,
                                     java.lang.String cipher,
                                     byte[] key,
                                     int keyIterations)
        Open an encrypted file store with the given settings.
        Parameters:
        handler - the data handler
        name - the file name
        mode - the access mode (r, rw, rws, rwd)
        cipher - the name of the cipher algorithm
        key - the encryption key
        keyIterations - the number of iterations the key should be hashed
        Returns:
        the created object
      • generateSalt

        protected byte[] generateSalt()
        Generate the random salt bytes if required.
        Returns:
        the random salt or the magic
      • initKey

        protected void initKey​(byte[] salt)
        Initialize the key using the given salt.
        Parameters:
        salt - the salt
      • setCheckedWriting

        public void setCheckedWriting​(boolean value)
      • checkWritingAllowed

        private void checkWritingAllowed()
      • checkPowerOff

        private void checkPowerOff()
      • init

        public void init()
        Initialize the file. This method will write or check the file header if required.
      • close

        public void close()
        Close the file.
      • closeSilently

        public void closeSilently()
        Close the file without throwing any exceptions. Exceptions are simply ignored.
      • closeAndDeleteSilently

        public void closeAndDeleteSilently()
        Close the file (ignoring exceptions) and delete the file.
      • readFullyDirect

        public void readFullyDirect​(byte[] b,
                                    int off,
                                    int len)
        Read a number of bytes without decrypting.
        Parameters:
        b - the target buffer
        off - the offset
        len - the number of bytes to read
      • readFully

        public void readFully​(byte[] b,
                              int off,
                              int len)
        Read a number of bytes.
        Parameters:
        b - the target buffer
        off - the offset
        len - the number of bytes to read
      • seek

        public void seek​(long pos)
        Go to the specified file location.
        Parameters:
        pos - the location
      • writeDirect

        protected void writeDirect​(byte[] b,
                                   int off,
                                   int len)
        Write a number of bytes without encrypting.
        Parameters:
        b - the source buffer
        off - the offset
        len - the number of bytes to write
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
        Write a number of bytes.
        Parameters:
        b - the source buffer
        off - the offset
        len - the number of bytes to write
      • setLength

        public void setLength​(long newLength)
        Set the length of the file. This will expand or shrink the file.
        Parameters:
        newLength - the new file size
      • length

        public long length()
        Get the file size in bytes.
        Returns:
        the file size
      • getFilePointer

        public long getFilePointer()
        Get the current location of the file pointer.
        Returns:
        the location
      • sync

        public void sync()
        Call fsync. Depending on the operating system and hardware, this may or may not in fact write the changes.
      • autoDelete

        public void autoDelete()
        Automatically delete the file once it is no longer in use.
      • stopAutoDelete

        public void stopAutoDelete()
        No longer automatically delete the file once it is no longer in use.
      • closeFile

        public void closeFile()
                       throws java.io.IOException
        Close the file. The file may later be re-opened using openFile.
        Throws:
        java.io.IOException - on failure
      • closeFileSilently

        private void closeFileSilently()
        Just close the file, without setting the reference to null. This method is called when writing failed. The reference is not set to null so that there are no NullPointerExceptions later on.
      • openFile

        public void openFile()
                      throws java.io.IOException
        Re-open the file. The file pointer will be reset to the previous location.
        Throws:
        java.io.IOException - on failure
      • trace

        private static void trace​(java.lang.String method,
                                  java.lang.String fileName,
                                  java.lang.Object o)
      • tryLock

        public boolean tryLock()
        Try to lock the file.
        Returns:
        true if successful
      • releaseLock

        public void releaseLock()
        Release the file lock.