Class RealFileSystem

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, FileSystem

    public final class RealFileSystem
    extends java.lang.Object
    implements FileSystem
    A real filesystem.
    • Field Detail

      • NEEDS_CONVERSION

        private static final boolean NEEDS_CONVERSION
      • realRoot

        private final java.io.File realRoot
      • privileged

        private final boolean privileged
    • Constructor Detail

      • RealFileSystem

        public RealFileSystem​(java.io.File realRoot)
        Construct a real filesystem with the given real root.
        Parameters:
        realRoot - the real root
      • RealFileSystem

        public RealFileSystem​(java.io.File realRoot,
                              boolean privileged)
        Construct a real filesystem with the given real root.
        Parameters:
        realRoot - the real root
        privileged - true to check permissions once up front, false to check at access time
    • Method Detail

      • doIoPrivileged

        private static <T> T doIoPrivileged​(java.security.PrivilegedExceptionAction<T> action)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • openInputStream

        public java.io.InputStream openInputStream​(VirtualFile mountPoint,
                                                   VirtualFile target)
                                            throws java.io.IOException
        Open an input stream for the file at the given relative path.
        Specified by:
        openInputStream in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        the input stream
        Throws:
        java.io.IOException - if an I/O error occurs
      • isReadOnly

        public boolean isReadOnly()
        Determine whether this filesystem is read-only. A read-only filesystem prohibits file modification or deletion. It is not an error to mount a read-write filesystem within a read-only filesystem however (this operation does not take place within the FileSystem implementation).
        Specified by:
        isReadOnly in interface FileSystem
        Returns:
        true if the filesystem is read-only
      • getFile

        public java.io.File getFile​(VirtualFile mountPoint,
                                    VirtualFile target)
        Get a real File for the given path within this filesystem. Some filesystem types will need to make a copy in order to return this file; such copies should be cached and retained until the filesystem is closed. Depending on the file type, the real path of the returned File may or may not bear a relationship to the virtual path provided; if such a relationship is required, it must be negotiated at the time the filesystem is mounted.
        Specified by:
        getFile in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        the file instance
      • delete

        public boolean delete​(VirtualFile mountPoint,
                              VirtualFile target)
        Attempt to delete a virtual file within this filesystem.
        Specified by:
        delete in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        true if the file was deleted, false if it failed for any reason
      • getSize

        public long getSize​(VirtualFile mountPoint,
                            VirtualFile target)
        Get the size of a virtual file within this filesystem.
        Specified by:
        getSize in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        the size, in bytes, or 0L if the file does not exist or is a directory
      • getLastModified

        public long getLastModified​(VirtualFile mountPoint,
                                    VirtualFile target)
        Get the last modification time of a virtual file within this filesystem.
        Specified by:
        getLastModified in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        the modification time in milliseconds, or 0L if the file does not exist or if an error occurs
      • exists

        public boolean exists​(VirtualFile mountPoint,
                              VirtualFile target)
        Ascertain the existance of a virtual file within this filesystem.
        Specified by:
        exists in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        true if the file exists, false otherwise
      • isFile

        public boolean isFile​(VirtualFile mountPoint,
                              VirtualFile target)
        Ascertain whether a virtual file within this filesystem is a plain file.
        Specified by:
        isFile in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        true if the file exists and is a plain file, false otherwise
      • isDirectory

        public boolean isDirectory​(VirtualFile mountPoint,
                                   VirtualFile target)
        Ascertain whether a virtual file within this filesystem is a directory.
        Specified by:
        isDirectory in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        true if the file exists and is a directory, false otherwise
      • getDirectoryEntries

        public java.util.List<java.lang.String> getDirectoryEntries​(VirtualFile mountPoint,
                                                                    VirtualFile target)
        Read a directory. Returns all the simple path names (excluding "." and ".."). The returned list will be empty if the node is not a directory.
        Specified by:
        getDirectoryEntries in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        the collection of children names
      • getCodeSigners

        public java.security.CodeSigner[] getCodeSigners​(VirtualFile mountPoint,
                                                         VirtualFile target)
        Get the CodeSigners for a the virtual file.
        Specified by:
        getCodeSigners in interface FileSystem
        Parameters:
        mountPoint - the mount point of the filesystem instance (guaranteed to be a parent of target)
        target - the virtual file to act upon
        Returns:
        CodeSigner for the virtual file or null if not signed.
      • getMountSource

        public java.io.File getMountSource()
        Get the File source provided at mount time.
        Specified by:
        getMountSource in interface FileSystem
        Returns:
        the source used for mounting
      • getRootURI

        public java.net.URI getRootURI()
                                throws java.net.URISyntaxException
        Description copied from interface: FileSystem
        Get the root URI for this file system, or null if there is no valid root URI.
        Specified by:
        getRootURI in interface FileSystem
        Returns:
        the root URI
        Throws:
        java.net.URISyntaxException - if the URI isn't valid
      • close

        public void close()
                   throws java.io.IOException
        Destroy this filesystem instance. After this method is called, the filesystem may not be used in any way. This method should be called only after all mounts of this filesystem have been cleared; otherwise, VFS accesses may result in IOExceptions.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface FileSystem
        Throws:
        java.io.IOException - if an I/O error occurs during close