getDefault 方法来获取默认文件系统和工厂方法来构建其他类型的文件系统。
首次调用此类定义的任何方法都会导致加载默认值 provider 。由 URI 方案“文件”标识的默认提供程序创建 FileSystem ,提供对 Java 虚拟机可访问的文件系统的访问。如果加载或初始化默认提供程序的过程失败,则会抛出一个未指定的错误。
installedProviders 方法的第一次调用,通过调用此类定义的任何 newFileSystem 方法,定位并加载所有已安装的文件系统提供程序。使用ServiceLoader 类定义的服务提供者加载工具加载已安装的提供者。使用系统类加载器加载已安装的提供程序。如果找不到系统类加载器,则使用平台类加载器。提供程序通常通过将它们放在应用程序类路径上的 JAR 文件中进行安装,该 JAR 文件在资源目录 META-INF/services 中包含一个名为 java.nio.file.spi.FileSystemProvider 的提供程序配置文件,该文件列出了 FileSystemProvider 的具体子类的一个或多个完全限定名称具有零参数构造函数。安装提供程序所在的顺序是特定于实现的。如果一个提供者被实例化并且它的 getScheme 返回与先前实例化的提供者相同的 URI 方案,那么最近实例化的副本将被丢弃。 URI 方案的比较不考虑大小写。在构造期间,提供者可以安全地访问与默认提供者关联的文件,但需要注意避免循环加载其他已安装的提供者。如果检测到已安装提供程序的循环加载,则会抛出一个未指定的错误。
此类还定义了允许在查找提供者时指定 ClassLoader 的工厂方法。与已安装的提供程序一样,通过将提供程序配置文件放在资源目录 META-INF/services 中来标识提供程序类。
如果一个线程启动已安装文件系统提供程序的加载,而另一个线程调用一个方法,该方法也尝试加载提供程序,那么该方法将阻塞,直到加载完成。
- 自从:
- 1.7
-
方法总结
修饰符和类型方法描述static FileSystem返回默认值FileSystem。static FileSystemgetFileSystem(URI uri) 返回对现有FileSystem的引用。static FileSystemnewFileSystem(URI uri, Map<String, ?> env) 构造一个由URI标识的新文件系统static FileSystemnewFileSystem(URI uri, Map<String, ?> env, ClassLoader loader) 构造一个由URI标识的新文件系统static FileSystemnewFileSystem(Path path) 构造一个新的FileSystem来访问文件的内容作为文件系统。static FileSystemnewFileSystem(Path path, ClassLoader loader) 构造一个新的FileSystem来访问文件的内容作为文件系统。static FileSystemnewFileSystem(Path path, Map<String, ?> env) 构造一个新的FileSystem来访问文件的内容作为文件系统。static FileSystemnewFileSystem(Path path, Map<String, ?> env, ClassLoader loader) 构造一个新的FileSystem来访问文件的内容作为文件系统。
-
方法详情
-
getDefault
返回默认值FileSystem。默认文件系统创建对象,这些对象提供对 Java 虚拟机可访问的文件系统的访问。文件系统的working directory为当前用户目录,由系统属性user.dir命名。这允许与java.io.File类进行互操作。此类定义的任何方法的第一次调用都会找到默认的
provider对象。在未定义系统属性java.nio.file.spi.DefaultFileSystemProvider的情况下,默认提供程序是系统默认提供程序,调用它来创建默认文件系统。如果系统属性
java.nio.file.spi.DefaultFileSystemProvider被定义,则它被视为由 URI 方案"file"标识的具体提供者类的一个或多个完全限定名称的列表。如果该属性是多个名称的列表,则这些名称用逗号分隔。使用系统类加载器加载每个类,并通过调用形式参数类型为FileSystemProvider的单参数构造函数来实例化。提供程序按照它们在属性中列出的顺序加载和实例化。如果此过程失败或提供者的方案不等于"file",则会抛出未指定的错误。通常比较 URI 方案时不考虑大小写,但对于默认提供程序,该方案必须是"file"。第一个提供者类是通过引用系统默认提供者来调用它来实例化的。第二个提供者类是通过使用对第一个提供者实例的引用来调用它来实例化的。第三个提供者类通过使用对第二个实例的引用来调用它来实例化,依此类推。最后一个被实例化的提供者成为默认提供者;它的getFileSystem方法通过 URI"file:///"调用以获取对默认文件系统的引用。此方法的后续调用将返回由第一次调用返回的文件系统。
- 返回:
- 默认文件系统
-
getFileSystem
返回对现有FileSystem的引用。此方法遍历
installed提供程序以找到由给定 URI 的 URIscheme标识的提供程序。 URI 方案的比较不考虑大小写。 URI 的确切形式高度依赖于提供者。如果找到,则调用提供者的getFileSystem方法以获取对FileSystem的引用。一旦此提供程序创建的文件系统是
closed,如果此方法返回对已关闭文件系统的引用或抛出FileSystemNotFoundException,则它依赖于提供程序。如果提供者允许使用与之前创建的文件系统相同的 URI 创建新的文件系统,那么如果在文件系统关闭之后(并且在newFileSystem方法创建新实例之前)调用此方法,则会抛出异常。如果安装了安全管理器,则提供者实现可能需要在返回对现有文件系统的引用之前检查权限。在
default文件系统的情况下,不需要权限检查。- 参数:
uri- 定位文件系统的 URI- 返回:
- 对文件系统的引用
- 抛出:
IllegalArgumentException- 如果不满足uri参数的先决条件FileSystemNotFoundException- 如果由 URI 标识的文件系统不存在ProviderNotFoundException- 如果未安装支持 URI 方案的提供程序SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限
-
newFileSystem
构造一个由URI标识的新文件系统此方法遍历
installed提供程序以找到由给定 URI 的 URIscheme标识的提供程序。 URI 方案的比较不考虑大小写。 URI 的确切形式高度依赖于提供者。如果找到,则调用提供者的newFileSystem(URI,Map)方法来构建新的文件系统。一旦文件系统是
closed,如果提供者允许使用与它之前创建的文件系统相同的 URI 创建新文件系统,则它依赖于提供者。使用示例:假设安装了由方案
"memory"标识的提供程序:FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), Map.of("capacity", "16G", "blockSize", "4k"));- 参数:
uri- 标识文件系统的 URIenv- 用于配置文件系统的提供者特定属性的映射;可能是空的- 返回:
- 一个新的文件系统
- 抛出:
IllegalArgumentException- 如果不满足uri参数的先决条件,或者env参数不包含提供商所需的属性,或者属性值无效FileSystemAlreadyExistsException- 如果文件系统已经创建ProviderNotFoundException- 如果未安装支持 URI 方案的提供程序IOException- 如果创建文件系统时发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝文件系统提供程序实现所需的未指定权限
-
newFileSystem
public static FileSystem newFileSystem(URI uri, Map <String , ?> env, ClassLoader loader) throws IOException构造一个由URI标识的新文件系统此方法首先尝试以与
newFileSystem(URI,Map)方法完全相同的方式定位已安装的提供程序。如果安装的提供者都不支持 URI 方案,则尝试使用给定的类加载器定位提供者。如果找到支持 URI 方案的提供者,则调用其newFileSystem(URI,Map)来构建新的文件系统。- 参数:
uri- 标识文件系统的 URIenv- 用于配置文件系统的提供者特定属性的映射;可能是空的loader- 用于定位提供者的类加载器或null仅尝试定位已安装的提供者- 返回:
- 一个新的文件系统
- 抛出:
IllegalArgumentException- 如果不满足uri参数的先决条件,或者env参数不包含提供商所需的属性,或者属性值无效FileSystemAlreadyExistsException- 如果 URI 方案标识已安装的提供程序并且文件系统已创建ProviderNotFoundException- 如果未找到支持 URI 方案的提供者ServiceConfigurationError- 加载服务提供商时发生错误IOException- 创建文件系统时发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝文件系统提供程序实现所需的未指定权限
-
newFileSystem
构造一个新的FileSystem来访问文件的内容作为文件系统。此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。
此方法首先尝试以与使用空映射的
newFileSystem(Path, Map, ClassLoader)方法完全相同的方式定位已安装的提供程序。如果已安装的提供程序均未返回FileSystem,则会尝试使用给定的类加载器定位提供程序。如果提供程序返回文件系统,则查找终止并返回文件系统。- 参数:
path- 文件路径loader- 用于定位提供者的类加载器或null仅尝试定位已安装的提供者- 返回:
- 一个新的文件系统
- 抛出:
ProviderNotFoundException- 如果无法找到支持此文件类型的提供程序ServiceConfigurationError- 加载服务提供商时发生错误IOException- 如果发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限
-
newFileSystem
构造一个新的FileSystem来访问文件的内容作为文件系统。此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。
此方法首先尝试以与
newFileSystem(Path, Map, ClassLoader)方法完全相同的方式定位已安装的提供程序。如果找到,则调用提供者的newFileSystem(Path, Map)方法来构建新的文件系统。- 参数:
path- 文件路径env- 用于配置文件系统的提供者特定属性的映射;可能是空的- 返回:
- 一个新的文件系统
- 抛出:
ProviderNotFoundException- 如果无法找到支持此文件类型的提供程序ServiceConfigurationError- 加载服务提供商时发生错误IOException- 如果发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限- 自从:
- 13
-
newFileSystem
构造一个新的FileSystem来访问文件的内容作为文件系统。此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。
此方法首先尝试以与
newFileSystem(Path, Map, ClassLoader)方法完全相同的方式定位已安装的提供程序。如果找到,则使用空映射调用提供者的newFileSystem(Path, Map)方法来构建新的文件系统。- 参数:
path- 文件路径- 返回:
- 一个新的文件系统
- 抛出:
ProviderNotFoundException- 如果无法找到支持此文件类型的提供程序ServiceConfigurationError- 加载服务提供商时发生错误IOException- 如果发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限- 自从:
- 13
-
newFileSystem
public static FileSystem newFileSystem(Path path, Map <String , ?> env, ClassLoader loader) throws IOException构造一个新的FileSystem来访问文件的内容作为文件系统。此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。
此方法遍历
installed提供程序。它依次调用每个提供者的newFileSystem(Path,Map)方法。如果提供者返回文件系统,则迭代终止并返回文件系统。如果已安装的提供程序均未返回FileSystem,则会尝试使用给定的类加载器定位提供程序。如果提供程序返回文件系统,则查找终止并返回文件系统。- 参数:
path- 文件路径env- 用于配置文件系统的提供者特定属性的映射;可能是空的loader- 用于定位提供者的类加载器或null仅尝试定位已安装的提供者- 返回:
- 一个新的文件系统
- 抛出:
ProviderNotFoundException- 如果无法找到支持此文件类型的提供程序ServiceConfigurationError- 加载服务提供商时发生错误IOException- 如果发生 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限- 自从:
- 13
-