# FileSystems

public final class **FileSystems** extends [Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html)  
Factory methods for file systems. This class defines the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#getDefault()` method to get the default file system and factory methods to
construct other types of file systems.

The first invocation of any of the methods defined by this class causes
the default `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html` to be loaded. The default
provider, identified by the URI scheme "file", creates the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html`
that provides access to the file systems accessible to the Java virtual
machine. If the process of loading or initializing the default provider fails
then an unspecified error is thrown.

The first invocation of the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#installedProviders()` method, by way of invoking any of the `newFileSystem` methods defined by this class, locates and loads all
installed file system providers. Installed providers are loaded using the
service-provider loading facility defined by the `https://developers.google.com/j2objc/javadoc/jre/reference/java/util/ServiceLoader.html` class.
Installed providers are loaded using the system class loader. If the
system class loader cannot be found then the extension class loader is used;
if there is no extension class loader then the bootstrap class loader is used.
Providers are typically installed by placing them in a JAR file on the
application class path or in the extension directory, the JAR file contains a
provider-configuration file named `java.nio.file.spi.FileSystemProvider`
in the resource directory `META-INF/services`, and the file lists one or
more fully-qualified names of concrete subclass of `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html`
that have a zero argument constructor.
The ordering that installed providers are located is implementation specific.
If a provider is instantiated and its `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#getScheme()` returns the same URI scheme of a provider that was previously
instantiated then the most recently instantiated duplicate is discarded. URI
schemes are compared without regard to case. During construction a provider
may safely access files associated with the default provider but care needs
to be taken to avoid circular loading of other installed providers. If
circular loading of installed providers is detected then an unspecified error
is thrown.

This class also defines factory methods that allow a `https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/ClassLoader.html`
to be specified when locating a provider. As with installed providers, the
provider classes are identified by placing the provider configuration file
in the resource directory `META-INF/services`.

If a thread initiates the loading of the installed file system providers
and another thread invokes a method that also attempts to load the providers
then the method will block until the loading completes.

### Public Method Summary

|---|---|
| static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html) | [getDefault](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#getDefault())() Returns the default `FileSystem`. |
| static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html) | [getFileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#getFileSystem(java.net.URI))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri) Returns a reference to an existing `FileSystem`. |
| static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html) | [newFileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.nio.file.Path,%20java.lang.ClassLoader))([Path](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/Path.html) path, [ClassLoader](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/ClassLoader.html) loader) Constructs a new `FileSystem` to access the contents of a file as a file system. |
| static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html) | [newFileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), ?\> env) Constructs a new file system that is identified by a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html` This method iterates over the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#installedProviders()` providers to locate the provider that is identified by the URI `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html#getScheme()` of the given URI. |
| static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html) | [newFileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>,%20java.lang.ClassLoader))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), ?\> env, [ClassLoader](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/ClassLoader.html) loader) Constructs a new file system that is identified by a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html` This method first attempts to locate an installed provider in exactly the same manner as the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>)` method. |

### Inherited Method Summary

From class [java.lang.Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html)

|---|---|
| [Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html) | [clone](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#clone())() Creates and returns a copy of this `Object`. |
| boolean | [equals](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#equals(java.lang.Object))([Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html) obj) Compares this instance with the specified object and indicates if they are equal. |
| void | [finalize](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#finalize())() Invoked when the garbage collector has detected that this instance is no longer reachable. |
| final [Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<?\> | [getClass](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#getClass())() Returns the unique instance of `https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html` that represents this object's class. |
| int | [hashCode](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#hashCode())() Returns an integer hash code for this object. |
| final void | [notify](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#notify())() Causes a thread which is waiting on this object's monitor (by means of calling one of the `wait()` methods) to be woken up. |
| final void | [notifyAll](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#notifyAll())() Causes all threads which are waiting on this object's monitor (by means of calling one of the `wait()` methods) to be woken up. |
| [String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html) | [toString](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#toString())() Returns a string containing a concise, human-readable description of this object. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait(long,%20int))(long timeout, int nanos) Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object or until the specified timeout expires. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait(long))(long timeout) Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object or until the specified timeout expires. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait())() Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object. |

## Public Methods

#### public static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html)
**getDefault**
()

Returns the default `FileSystem`. The default file system creates
objects that provide access to the file systems accessible to the Java
virtual machine. The *working directory* of the file system is
the current user directory, named by the system property `user.dir`.
This allows for interoperability with the `https://developers.google.com/j2objc/javadoc/jre/reference/java/io/File.html`
class.

The first invocation of any of the methods defined by this class
locates the default `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html` object. Where the
system property `java.nio.file.spi.DefaultFileSystemProvider` is
not defined then the default provider is a system-default provider that
is invoked to create the default file system.

If the system property `java.nio.file.spi.DefaultFileSystemProvider`
is defined then it is taken to be a list of one or more fully-qualified
names of concrete provider classes identified by the URI scheme
`"file"`. Where the property is a list of more than one name then
the names are separated by a comma. Each class is loaded, using the system
class loader, and instantiated by invoking a one argument constructor
whose formal parameter type is `FileSystemProvider`. The providers
are loaded and instantiated in the order they are listed in the property.
If this process fails or a provider's scheme is not equal to `"file"`
then an unspecified error is thrown. URI schemes are normally compared
without regard to case but for the default provider, the scheme is
required to be `"file"`. The first provider class is instantiated
by invoking it with a reference to the system-default provider.
The second provider class is instantiated by invoking it with a reference
to the first provider instance. The third provider class is instantiated
by invoking it with a reference to the second instance, and so on. The
last provider to be instantiated becomes the default provider; its `getFileSystem` method is invoked with the URI `"file:///"` to
get a reference to the default file system.

Subsequent invocations of this method return the file system that was
returned by the first invocation.

##### Returns

- the default file system

#### public static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html)
**getFileSystem**
([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri)

Returns a reference to an existing `FileSystem`.

This method iterates over the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#installedProviders()` providers to locate the provider that is identified by the URI
`https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html#getScheme()` of the given URI. URI schemes are compared
without regard to case. The exact form of the URI is highly provider
dependent. If found, the provider's `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#getFileSystem(java.net.URI)` method is invoked to obtain a reference to the `FileSystem`.

Once a file system created by this provider is `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html#close()` it is provider-dependent if this method returns a reference to
the closed file system or throws `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystemNotFoundException.html`.
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 `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>)` 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 `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#getDefault()` file system, no permission check is required.

##### Parameters

| uri | the URI to locate the file system |
|---|---|

##### Returns

- the reference to the file system

##### Throws

| [IllegalArgumentException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/IllegalArgumentException.html) | if the pre-conditions for the `uri` parameter are not met |
| [FileSystemNotFoundException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystemNotFoundException.html) | if the file system, identified by the URI, does not exist |
| [ProviderNotFoundException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/ProviderNotFoundException.html) | if a provider supporting the URI scheme is not installed |
| [SecurityException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/SecurityException.html) | if a security manager is installed and it denies an unspecified permission |
|---|---|

#### public static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html)
**newFileSystem**
([Path](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/Path.html) path, [ClassLoader](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/ClassLoader.html) loader)

Constructs a new `FileSystem` to access the contents of a file as a
file system.

This method makes use of specialized providers that create pseudo file
systems where the contents of one or more files is treated as a file
system.

This method iterates over the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#installedProviders()` providers. It invokes, in turn, each provider's `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#newFileSystem(java.nio.file.Path,%20java.util.Map<java.lang.String,%20?>)` method
with an empty map. If a provider returns a file system then the iteration
terminates and the file system is returned. If none of the installed
providers return a `FileSystem` then an attempt is made to locate
the provider using the given class loader. If a provider returns a file
system then the lookup terminates and the file system is returned.

##### Parameters

| path | the path to the file |
| loader | the class loader to locate the provider or `null` to only attempt to locate an installed provider |
|---|---|

##### Returns

- a new file system

##### Throws

| [ProviderNotFoundException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/ProviderNotFoundException.html) | if a provider supporting this file type cannot be located |
| [ServiceConfigurationError](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/ServiceConfigurationError.html) | when an error occurs while loading a service provider |
| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs |
| [SecurityException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/SecurityException.html) | if a security manager is installed and it denies an unspecified permission |
|---|---|

#### public static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html)
**newFileSystem**
([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), ?\> env)

Constructs a new file system that is identified by a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html`

This method iterates over the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#installedProviders()` providers to locate the provider that is identified by the URI
`https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html#getScheme()` of the given URI. URI schemes are compared
without regard to case. The exact form of the URI is highly provider
dependent. If found, the provider's `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>)` method is invoked to construct the new file system.

Once a file system is `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html#close()` 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.

**Usage Example:**
Suppose there is a provider identified by the scheme `"memory"`
installed:

```
   Map<String,String> env = new HashMap<>();
   env.put("capacity", "16G");
   env.put("blockSize", "4k");
   FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), env);
 
```

<br />

##### Parameters

| uri | the URI identifying the file system |
| env | a map of provider specific properties to configure the file system; may be empty |
|---|---|

##### Returns

- a new file system

##### Throws

| [IllegalArgumentException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/IllegalArgumentException.html) | if the pre-conditions for the `uri` parameter are not met, or the `env` parameter does not contain properties required by the provider, or a property value is invalid |
| [FileSystemAlreadyExistsException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystemAlreadyExistsException.html) | if the file system has already been created |
| [ProviderNotFoundException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/ProviderNotFoundException.html) | if a provider supporting the URI scheme is not installed |
| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs creating the file system |
| [SecurityException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/SecurityException.html) | if a security manager is installed and it denies an unspecified permission required by the file system provider implementation |
|---|---|

#### public static [FileSystem](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystem.html)
**newFileSystem**
([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), ?\> env, [ClassLoader](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/ClassLoader.html) loader)

Constructs a new file system that is identified by a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html`

This method first attempts to locate an installed provider in exactly
the same manner as the `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystems.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>)`
method. If none of the installed providers support the URI scheme then an
attempt is made to locate the provider using the given class loader. If a
provider supporting the URI scheme is located then its `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/spi/FileSystemProvider.html#newFileSystem(java.net.URI,%20java.util.Map<java.lang.String,%20?>)` is
invoked to construct the new file system.

##### Parameters

| uri | the URI identifying the file system |
| env | a map of provider specific properties to configure the file system; may be empty |
| loader | the class loader to locate the provider or `null` to only attempt to locate an installed provider |
|---|---|

##### Returns

- a new file system

##### Throws

| [IllegalArgumentException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/IllegalArgumentException.html) | if the pre-conditions for the `uri` parameter are not met, or the `env` parameter does not contain properties required by the provider, or a property value is invalid |
| [FileSystemAlreadyExistsException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileSystemAlreadyExistsException.html) | if the URI scheme identifies an installed provider and the file system has already been created |
| [ProviderNotFoundException](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/ProviderNotFoundException.html) | if a provider supporting the URI scheme is not found |
| [ServiceConfigurationError](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/ServiceConfigurationError.html) | when an error occurs while loading a service provider |
| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | an I/O error occurs creating the file system |
| [SecurityException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/SecurityException.html) | if a security manager is installed and it denies an unspecified permission required by the file system provider implementation |
|---|---|