/** * Get a random access (read/write) file. * * @param mode "r", "rw", "rws", or "rwd". The "rws" and "rwd" modes specify that the data is to * be written to persistent store, consistent with the java.io.RandomAccessFile class * ("synchronized" with the persistent storage, in the file system meaning of the word * "synchronized"). However the implementation is not required to implement the "rws" or "rwd" * modes. The implementation may treat "rws" and "rwd" as "rw". It is up to the user of this * interface to call the StorageRandomAccessFile.sync method. If the "rws" or "rwd" modes are * supported and the RandomAccessFile was opened in "rws" or "rwd" mode then the * implementation of StorageRandomAccessFile.sync need not do anything. * @return an object that can be used for random access to the file. * @exception IllegalArgumentException if the mode argument is not equal to one of "r", "rw". * @exception FileNotFoundException if the file exists but is a directory rather than a regular * file, or cannot be opened or created for any other reason . */ public StorageRandomAccessFile getRandomAccessFile(String mode) throws FileNotFoundException { return new CorruptRandomAccessFile(realFile.getRandomAccessFile(mode), (File) realFile); }
/** * Get the names of all files and sub-directories in the directory named by this path name. * * <p>This method is only used in a writable database. * * @return An array of the names of the files and directories in this directory denoted by this * abstract pathname. The returned array will have length 0 if this directory is empty. * Returns null if this StorageFile is not a directory, or if an I/O error occurs. The return * value is undefined if the database is read-only. */ public String[] list() { return realFile.list(); }
/** * Get an exclusive lock. * * <p>This is used to ensure that two or more JVMs do not open the same database at the same time. * * @return EXCLUSIVE_FILE_LOCK_NOT_AVAILABLE if the lock cannot be acquired because it is already * held. <br> * EXCLUSIVE_FILE_LOCK if the lock was successfully acquired. <br> * NO_FILE_LOCK_SUPPORT if the system does not support exclusive locks.<br> */ public synchronized int getExclusiveFileLock() { return realFile.getExclusiveFileLock(); } // end of getExclusiveFileLock
/** * Release the resource associated with an earlier acquired exclusive lock * * @see #getExclusiveFileLock */ public synchronized void releaseExclusiveFileLock() { realFile.releaseExclusiveFileLock(); } // End of releaseExclusiveFileLock
/** * Converts this StorageFile into a canonical pathname string. The form of the canonical path is * system dependent. * * @return The pathname as a string. * @exception IOException if an I/O error occurred while finding the canonical name */ public String getCanonicalPath() throws IOException { return realFile.getCanonicalPath(); }
/** * Creates an input stream from realFile * * @return an input stream suitable for reading from the file. * @exception FileNotFoundException if the file is not found. */ public InputStream getInputStream() throws FileNotFoundException { return realFile.getInputStream(); }
/** * Make the named file or directory read-only. * * <p>This interface does not specify whether this also makes the file undeletable. * * @return <b>true</b> if the named file or directory was made read-only, or it already was * read-only; <b>false</b> if not. */ public boolean setReadOnly() { return realFile.setReadOnly(); }
/** * Tests whether the named file is a directory, or not. This is only called in writable storage * factories. * * @return <b>true</b> if named file exists and is a directory, <b>false</b> if not. The return * value is undefined if the storage is read-only. */ public boolean isDirectory() { return realFile.isDirectory(); }
/** * Creates the named directory, and all nonexistent parent directories. * * @return <b>true</b> if the directory was created, <b>false</b> if not */ public boolean mkdirs() { return realFile.mkdirs(); }
/** * Returns the length of the named file if it is not a directory. * * <p>The return value is not specified if the file is a directory. * * @return The length, in bytes, of the named file if it exists and is not a directory, 0 if the * file does not exist, or any value if the named file is a directory. */ public long length() { return realFile.length(); }
/** * Rename the file denoted by this name. * * <p>Note that StorageFile objects are immutable. This method renames the underlying file, it * does not change this StorageFile object. The StorageFile object denotes the same name as * before, however the exists() method will return false after the renameTo method executes * successfully. * * <p>It is not specified whether this method will succeed if a file already exists under the new * name. * * @param newName the new name. * @return <b>true</b> if the rename succeeded, <b>false</b> if not. */ public boolean renameTo(StorageFile newName) { return realFile.renameTo(newName); }
/** * If the named file does not already exist then create it as an empty normal file. * * <p>The implementation must synchronize with other threads accessing the same file (in the same * or a different process). If two threads both attempt to create a file with the same name at the * same time then at most one should succeed. * * @return <b>true</b> if this thread's invocation of createNewFile successfully created the named * file; <b>false</b> if not, i.e. <b>false</b> if the named file already exists or if another * concurrent thread created it. * @exception IOException - If the directory does not exist or some other I/O error occurred */ public boolean createNewFile() throws IOException { return realFile.createNewFile(); }
/** @return The last segment in the path name, "" if the path name sequence is empty. */ public String getName() { return realFile.getName(); }
/** * Determine whether the named file is writable. * * @return <b>true</b> if the file exists and is writable, <b>false</b> if not. */ public boolean canWrite() { return realFile.canWrite(); }
/** * Get the name of the parent directory if this name includes a parent. * * @return An StorageFile denoting the parent directory of this StorageFile, if it has a parent, * null if it does not have a parent. */ public StorageFile getParentDir() { return realFile.getParentDir(); }
/** * Tests whether the named file exists. * * @return <b>true</b> if the named file exists, <b>false</b> if not. */ public boolean exists() { return realFile.exists(); }
/** * Creates an output stream from a file name. * * @param append If true then data will be appended to the end of the file, if it already exists. * If false and a normal file already exists with this name the file will first be truncated * to zero length. * @return an output stream suitable for writing to the file. * @exception FileNotFoundException if the file exists but is a directory rather than a regular * file, does not exist but cannot be created, or cannot be opened for any other reason. */ public OutputStream getOutputStream(final boolean append) throws FileNotFoundException { return realFile.getOutputStream(append); }
/** * Deletes the named file or empty directory. This method does not delete non-empty directories. * * @return <b>true</b> if the named file or directory is successfully deleted, <b>false</b> if not */ public boolean delete() { return realFile.delete(); }
/** * Converts this StorageFile into a pathname string. The character returned by * StorageFactory.getSeparator() is used to separate the directory and file names in the sequence. * * <p><b>The returned path may include the database directory. Therefore it cannot be directly * used to make an StorageFile equivalent to this one.</b> * * @return The pathname as a string. */ public String getPath() { return realFile.getPath(); }