@ParametersAreNonnullByDefault public abstract class FileSystemProviderBase extends FileSystemProvider
FileSystemProvider implementation
Important note: in order to match the behaviour of the default filesystems, you should be aware of the following:
copy operation will not
perform recursive copies; if the source is a non empty directory, the
operation fails with DirectoryNotEmptyException. This class
enforces this behaviour if the source and target paths are not on the
same filesystem; if they are, this is then
delegated to your
own copy implementation.move
operation exists and is a non empty directory, and you selected to
replace the existing target path, the operation fails with DirectoryNotEmptyException; if the source and target paths are not on
the same filesystem, this behaviour is enforced by this class; if they
are on the same filesystem, this is delegated to your own move
implementation.delete(Path) and FileSystemProvider.deleteIfExists(Path) do not perform recursive deletions; if the target
is a non empty directory, this method throws DirectoryNotEmptyException.| Modifier and Type | Field and Description |
|---|---|
protected FileSystemRepository |
repository |
| Modifier | Constructor and Description |
|---|---|
protected |
FileSystemProviderBase(FileSystemRepository repository) |
| Modifier and Type | Method and Description |
|---|---|
void |
checkAccess(Path path,
AccessMode... modes)
Checks the existence, and optionally the accessibility, of a file.
|
void |
copy(Path source,
Path target,
CopyOption... options)
Copy a file to a target file.
|
protected OpenOption[] |
copyToOpenOptions(CopyOption... copyOptions)
Convert a set of copy options to a set of open options
|
void |
createDirectory(Path dir,
FileAttribute<?>... attrs)
Creates a new directory.
|
void |
delete(Path path)
Deletes a file.
|
<V extends FileAttributeView> |
getFileAttributeView(Path path,
Class<V> type,
LinkOption... options)
Returns a file attribute view of a given type.
|
FileStore |
getFileStore(Path path)
Returns the
FileStore representing the file store where a file
is located. |
FileSystem |
getFileSystem(URI uri)
Returns an existing
FileSystem created by this provider. |
Path |
getPath(URI uri)
Return a
Path object by converting the given URI. |
String |
getScheme()
Returns the URI scheme that identifies this provider.
|
boolean |
isHidden(Path path)
Tells whether or not a file is considered hidden.
|
boolean |
isSameFile(Path path,
Path path2)
Tests if two paths locate the same file.
|
void |
move(Path source,
Path target,
CopyOption... options)
Move or rename a file to a target file.
|
SeekableByteChannel |
newByteChannel(Path path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs)
Opens or creates a file, returning a seekable byte channel to access the
file.
|
DirectoryStream<Path> |
newDirectoryStream(Path dir,
DirectoryStream.Filter<? super Path> filter)
Opens a directory, returning a
DirectoryStream to iterate over
the entries in the directory. |
FileSystem |
newFileSystem(URI uri,
Map<String,?> env)
Constructs a new
FileSystem object identified by a URI. |
InputStream |
newInputStream(Path path,
OpenOption... options)
Opens a file, returning an input stream to read from the file.
|
OutputStream |
newOutputStream(Path path,
OpenOption... options)
Opens or creates a file, returning an output stream that may be used to
write bytes to the file.
|
<A extends BasicFileAttributes> |
readAttributes(Path path,
Class<A> type,
LinkOption... options)
Reads a file's attributes as a bulk operation.
|
Map<String,Object> |
readAttributes(Path path,
String attributes,
LinkOption... options)
Reads a set of file attributes as a bulk operation.
|
void |
setAttribute(Path path,
String attribute,
Object value,
LinkOption... options)
Sets the value of a file attribute.
|
createLink, createSymbolicLink, deleteIfExists, installedProviders, newAsynchronousFileChannel, newFileChannel, newFileSystem, readSymbolicLinkprotected final FileSystemRepository repository
protected FileSystemProviderBase(FileSystemRepository repository)
public final String getScheme()
getScheme in class FileSystemProviderpublic final FileSystem newFileSystem(URI uri, Map<String,?> env) throws IOException
FileSystem object identified by a URI. This
method is invoked by the FileSystems.newFileSystem(URI, Map)
method to open a new file system identified by a URI.
The uri parameter is an absolute, hierarchical URI, with a
scheme equal (without regard to case) to the scheme supported by this
provider. The exact form of the URI is highly provider dependent. The
env parameter is a map of provider specific properties to
configure
the file system.
This method throws FileSystemAlreadyExistsException if the
file system already exists because it was previously created by an
invocation of this method. Once a file system is closed it is provider-dependent if the
provider allows a new file system to be created with the same URI as a
file system it previously created.
newFileSystem in class FileSystemProvideruri - URI referenceenv - A map of provider specific properties to configure the file
system;
may be emptyIllegalArgumentException - If the pre-conditions for the uri parameter aren't met,
or the env parameter does not contain properties required
by the provider, or a property value is invalidIOException - An I/O error occurs creating the file systemSecurityException - If a security manager is installed and it
denies an unspecified
permission required by the file system provider implementationFileSystemAlreadyExistsException - If the file system has
already been createdpublic final FileSystem getFileSystem(URI uri)
FileSystem created by this provider.
This method returns a reference to a FileSystem that was
created by invoking the newFileSystem
(URI,Map)
method. File systems created the newFileSystem(Path,Map) method are not returned by this method.
The file system is identified by its URI. Its exact form
is highly provider dependent. In the case of the default provider the
URI's
path component is "/" and the authority, query and fragment
components
are undefined (Undefined components are represented by null).
Once a file system created by this provider is closed it is provider-dependent if this
method returns a reference to the closed file system or throws FileSystemNotFoundException. If the provider allows a new file system to
be created with the same URI as a file system it previously created then
this method throws the exception if invoked after the file system is
closed (and before a new instance is created by the newFileSystem method).
If a security manager is installed then a provider implementation
may require to check a permission before returning a reference to an
existing file system. In the case of the default file system, no permission check is required.
getFileSystem in class FileSystemProvideruri - URI referenceIllegalArgumentException - If the pre-conditions for the uri parameter aren't metFileSystemNotFoundException - If the file system does not existSecurityException - If a security manager is installed and it
denies an unspecified
permission.public final Path getPath(URI uri)
Path object by converting the given URI. The
resulting Path is associated with a FileSystem that
already exists or is constructed automatically.
The exact form of the URI is file system provider dependent. In the
case of the default provider, the URI scheme is "file" and the
given URI has a non-empty path component, and undefined query, and
fragment components. The resulting Path is associated with the
default default FileSystem.
If a security manager is installed then a provider implementation
may require to check a permission. In the case of the default file system, no permission check is
required.
getPath in class FileSystemProvideruri - The URI to convertIllegalArgumentException - If the URI scheme does not identify
this provider or other
preconditions on the uri parameter do not holdFileSystemNotFoundException - The file system, identified by the
URI, does not exist and
cannot be created automaticallySecurityException - If a security manager is installed and it
denies an unspecified
permission.public final InputStream newInputStream(Path path, OpenOption... options) throws IOException
Files.newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) method.
The default implementation of this method opens a channel to the file
as if by invoking the newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) method and constructs a
stream that reads bytes from the channel. This method should be
overridden
where appropriate.
newInputStream in class FileSystemProviderpath - the path to the file to openoptions - options specifying how the file is openedIllegalArgumentException - if an invalid combination of options
is specifiedUnsupportedOperationException - if an unsupported option is
specifiedIOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the file.public final OutputStream newOutputStream(Path path, OpenOption... options) throws IOException
Files.newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) method.
The default implementation of this method opens a channel to the file
as if by invoking the newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) method and constructs a
stream that writes bytes to the channel. This method should be overridden
where appropriate.
newOutputStream in class FileSystemProviderpath - the path to the file to open or createoptions - options specifying how the file is openedIllegalArgumentException - if options contains an
invalid combination of optionsUnsupportedOperationException - if an unsupported option is
specifiedIOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkWrite
method is invoked to check write access to the file. The checkDelete method is
invoked to check delete access if the file is opened with the
DELETE_ON_CLOSE option.public final SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
Files.newByteChannel(Path, Set, FileAttribute[]) method.newByteChannel in class FileSystemProviderpath - the path to the file to open or createoptions - options specifying how the file is openedattrs - an optional list of file attributes to set atomically when
creating the fileIllegalArgumentException - if the set contains an invalid
combination of optionsUnsupportedOperationException - if an unsupported open option is
specified or the array contains
attributes that cannot be set atomically when creating the fileFileAlreadyExistsException - if a file of that name already
exists and the CREATE_NEW option is specified
(optional specific exception)IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the path if the file is
opened for reading. The checkWrite method is invoked to check write access to the path
if the file is opened for writing. The checkDelete method is
invoked to check delete access if the file is opened with the
DELETE_ON_CLOSE option.public final DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException
DirectoryStream to iterate over
the entries in the directory. This method works in exactly the manner
specified by the Files.newDirectoryStream(Path, DirectoryStream.Filter)
method.newDirectoryStream in class FileSystemProviderdir - the path to the directoryfilter - the directory stream filterDirectoryStream objectNotDirectoryException - if the file could not otherwise be
opened because it is not
a directory (optional specific exception)IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the directory.public final void createDirectory(Path dir, FileAttribute<?>... attrs) throws IOException
Files.createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) method.createDirectory in class FileSystemProviderdir - the directory to createattrs - an optional list of file attributes to set atomically when
creating the directoryUnsupportedOperationException - if the array contains an
attribute that cannot be set atomically
when creating the directoryFileAlreadyExistsException - if a directory could not otherwise
be created because a file of
that name already exists (optional specific exception)IOException - if an I/O error occurs or the parent directory
does not existSecurityException - In the case of the default provider, and a
security manager is
installed, the checkWrite
method is invoked to check write access to the new directory.public final void delete(Path path) throws IOException
Files.delete(java.nio.file.Path) method.delete in class FileSystemProviderpath - the path to the file to deleteNoSuchFileException - if the file does not exist (optional
specific exception)DirectoryNotEmptyException - if the file is a directory and
could not otherwise be deleted
because the directory is not empty (optional specific
exception)IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the SecurityManager.checkDelete(String) method
is invoked to check delete access to the filepublic final void copy(Path source, Path target, CopyOption... options) throws IOException
Files.copy(Path, Path, CopyOption[]) method
except that both the source and target paths must be associated with
this provider.copy in class FileSystemProvidersource - the path to the file to copytarget - the path to the target fileoptions - options specifying how the copy should be doneUnsupportedOperationException - if the array contains a copy
option that is not supportedFileAlreadyExistsException - if the target file exists but
cannot be replaced because the
REPLACE_EXISTING option is not specified (optional
specific exception)DirectoryNotEmptyException - the REPLACE_EXISTING option
is specified but the file
cannot be replaced because it is a non-empty directory
(optional specific exception)IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the source file, the
checkWrite is invoked
to check write access to the target file. If a symbolic link is
copied the security manager is invoked to check LinkPermission("symbolic").public final void move(Path source, Path target, CopyOption... options) throws IOException
Files.move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) method except that both the
source and target paths must be associated with this provider.move in class FileSystemProvidersource - the path to the file to movetarget - the path to the target fileoptions - options specifying how the move should be doneUnsupportedOperationException - if the array contains a copy
option that is not supportedFileAlreadyExistsException - if the target file exists but
cannot be replaced because the
REPLACE_EXISTING option is not specified (optional
specific exception)DirectoryNotEmptyException - the REPLACE_EXISTING option
is specified but the file
cannot be replaced because it is a non-empty directory
(optional specific exception)AtomicMoveNotSupportedException - if the options array contains
the ATOMIC_MOVE option but
the file cannot be moved as an atomic file system operation.IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkWrite
method is invoked to check write access to both the source and
target file.public final boolean isSameFile(Path path, Path path2) throws IOException
Files.isSameFile(java.nio.file.Path, java.nio.file.Path) method.isSameFile in class FileSystemProviderpath - one path to the filepath2 - the other pathtrue if, and only if, the two paths locate the same fileIOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to both files.public final boolean isHidden(Path path) throws IOException
Files.isHidden(java.nio.file.Path)
method.
This method is invoked by the isHidden method.
isHidden in class FileSystemProviderpath - the path to the file to testtrue if the file is considered hiddenIOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the file.public final void checkAccess(Path path, AccessMode... modes) throws IOException
This method may be used by the isReadable,
isWritable and isExecutable methods to check the accessibility of a file.
This method checks the existence of a file and that this Java virtual
machine has appropriate privileges that would allow it access the file
according to all of access modes specified in the modes parameter
as follows:
| Value | Description |
|---|---|
READ |
Checks that the file exists and that the Java virtual machine has permission to read the file. |
WRITE |
Checks that the file exists and that the Java virtual machine has permission to write to the file, |
EXECUTE |
Checks that the file exists and that the Java virtual machine has
permission to execute the file. The semantics
may differ when checking access to a directory. For example, on UNIX
systems, checking for EXECUTE access checks that the Java
virtual machine has permission to search the directory in order to
access file or subdirectories. |
If the modes parameter is of length zero, then the existence
of the file is checked.
This method follows symbolic links if the file referenced by this object is a symbolic link. Depending on the implementation, this method may require to read file permissions, access control lists, or other file attributes in order to check the effective access to the file. To determine the effective access to a file may require access to several attributes and so in some implementations this method may not be atomic with respect to other file system operations.
checkAccess in class FileSystemProviderpath - the path to the file to checkmodes - The access modes to check; may have zero elementsUnsupportedOperationException - an implementation is required to
support checking for
READ, WRITE, and EXECUTE access. This
exception is specified to allow for the Access enum to
be extended in future releases.NoSuchFileException - if a file does not exist (optional
specific exception)AccessDeniedException - the requested access would be denied or
the access cannot be
determined because the Java virtual machine has insufficient
privileges or other reasons. (optional specific exception)IOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
is invoked when checking read access to the file or only the
existence of the file, the checkWrite is invoked when checking write access to the file,
and checkExec is invoked
when checking execute access.public final <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options)
Files.getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...)
method.getFileAttributeView in class FileSystemProviderpath - the path to the filetype - the Class object corresponding to the file attribute viewoptions - options indicating how symbolic links are handlednull if
the attribute view type is not availablepublic final <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type, LinkOption... options) throws IOException
Files.readAttributes(Path, Class, LinkOption[]) method.readAttributes in class FileSystemProviderpath - the path to the filetype - the Class of the file attributes required
to readoptions - options indicating how symbolic links are handledUnsupportedOperationException - if an attributes of the given
type are not supportedIOException - if an I/O error occursSecurityException - In the case of the default provider, a
security manager is
installed, its checkRead
method is invoked to check read access to the filepublic final Map<String,Object> readAttributes(Path path, String attributes, LinkOption... options) throws IOException
Files.readAttributes(Path, String, LinkOption[]) method.readAttributes in class FileSystemProviderpath - the path to the fileattributes - the attributes to readoptions - options indicating how symbolic links are handledUnsupportedOperationException - if the attribute view is not
availableIllegalArgumentException - if no attributes are specified or an
unrecognized attributes is
specifiedIOException - If an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, its checkRead
method denies read access to the file. If this method is invoked
to read security sensitive attributes then the security manager
may be invoke to check for additional permissions.public final void setAttribute(Path path, String attribute, Object value, LinkOption... options) throws IOException
Files.setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) method.setAttribute in class FileSystemProviderpath - the path to the fileattribute - the attribute to setvalue - the attribute valueoptions - options indicating how symbolic links are handledUnsupportedOperationException - if the attribute view is not
availableIllegalArgumentException - if the attribute name is not
specified, or is not recognized, or
the attribute value is of the correct type but has an
inappropriate valueClassCastException - If the attribute value is not of the
expected type or is a
collection containing elements that are not of the expected
typeIOException - If an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, its checkWrite
method denies write access to the file. If this method is invoked
to set security sensitive attributes then the security manager
may be invoked to check for additional permissions.public final FileStore getFileStore(Path path) throws IOException
FileStore representing the file store where a file
is located. This method works in exactly the manner specified by the
Files.getFileStore(java.nio.file.Path) method.getFileStore in class FileSystemProviderpath - the path to the fileIOException - if an I/O error occursSecurityException - In the case of the default provider, and a
security manager is
installed, the checkRead
method is invoked to check read access to the file, and in
addition it checks RuntimePermission
("getFileStoreAttributes")protected OpenOption[] copyToOpenOptions(CopyOption... copyOptions)
This method is used in copy(Path, Path, CopyOption...) when
the filesystems for the source and destination paths are different.
The set of options built from this method (if any) will be passed to
FileSystemDriver.newOutputStream(Path, OpenOption...).
The default implementation will refuse both StandardCopyOption.COPY_ATTRIBUTES and StandardCopyOption.ATOMIC_MOVE, and will transform StandardCopyOption.REPLACE_EXISTING into both open options StandardOpenOption.WRITE and StandardOpenOption.CREATE_NEW. All
other copy options are not supported.
copyOptions - the options to copy (never null)UnsupportedOperationException - one specified option is not
supported