Package org.h2.store
Class FileStore
- java.lang.Object
-
- org.h2.store.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 alsoSecureFileStore
-
-
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.
-
-
-
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 objectname
- the file namemode
- 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 handlername
- the file namemode
- 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 handlername
- the file namemode
- the access mode (r, rw, rws, rwd)cipher
- the name of the cipher algorithmkey
- 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 handlername
- the file namemode
- the access mode (r, rw, rws, rwd)cipher
- the name of the cipher algorithmkey
- the encryption keykeyIterations
- 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 bufferoff
- the offsetlen
- 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 bufferoff
- the offsetlen
- 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 bufferoff
- the offsetlen
- 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 bufferoff
- the offsetlen
- 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.
-
-