模块 java.base

类 FileSystems

java.lang.Object
java.nio.file.FileSystems

public final class FileSystems extends Object
文件系统的工厂方法。这个类定义了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
  • 方法详情

    • getDefault

      public static 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

      public static FileSystem  getFileSystem(URI  uri)
      返回对现有 FileSystem 的引用。

      此方法遍历 installed 提供程序以找到由给定 URI 的 URI scheme 标识的提供程序。 URI 方案的比较不考虑大小写。 URI 的确切形式高度依赖于提供者。如果找到,则调用提供者的 getFileSystem 方法以获取对 FileSystem 的引用。

      一旦此提供程序创建的文件系统是 closed ,如果此方法返回对已关闭文件系统的引用或抛出 FileSystemNotFoundException ,则它依赖于提供程序。如果提供者允许使用与之前创建的文件系统相同的 URI 创建新的文件系统,那么如果在文件系统关闭之后(并且在 newFileSystem 方法创建新实例之前)调用此方法,则会抛出异常。

      如果安装了安全管理器,则提供者实现可能需要在返回对现有文件系统的引用之前检查权限。在 default 文件系统的情况下,不需要权限检查。

      参数:
      uri - 定位文件系统的 URI
      返回:
      对文件系统的引用
      抛出:
      IllegalArgumentException - 如果不满足 uri 参数的先决条件
      FileSystemNotFoundException - 如果由 URI 标识的文件系统不存在
      ProviderNotFoundException - 如果未安装支持 URI 方案的提供程序
      SecurityException - 如果安装了安全管理器并且它拒绝未指定的权限
    • newFileSystem

      public static FileSystem  newFileSystem(URI  uri, Map <String ,?> env) throws IOException
      构造一个由URI 标识的新文件系统

      此方法遍历 installed 提供程序以找到由给定 URI 的 URI scheme 标识的提供程序。 URI 方案的比较不考虑大小写。 URI 的确切形式高度依赖于提供者。如果找到,则调用提供者的 newFileSystem(URI,Map) 方法来构建新的文件系统。

      一旦文件系统是closed ,如果提供者允许使用与它之前创建的文件系统相同的 URI 创建新文件系统,则它依赖于提供者。

      使用示例:假设安装了由方案 "memory" 标识的提供程序:

       FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"),
                            Map.of("capacity", "16G", "blockSize", "4k"));
       
      参数:
      uri - 标识文件系统的 URI
      env - 用于配置文件系统的提供者特定属性的映射;可能是空的
      返回:
      一个新的文件系统
      抛出:
      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 - 标识文件系统的 URI
      env - 用于配置文件系统的提供者特定属性的映射;可能是空的
      loader - 用于定位提供者的类加载器或 null 仅尝试定位已安装的提供者
      返回:
      一个新的文件系统
      抛出:
      IllegalArgumentException - 如果不满足 uri 参数的先决条件,或者 env 参数不包含提供商所需的属性,或者属性值无效
      FileSystemAlreadyExistsException - 如果 URI 方案标识已安装的提供程序并且文件系统已创建
      ProviderNotFoundException - 如果未找到支持 URI 方案的提供者
      ServiceConfigurationError - 加载服务提供商时发生错误
      IOException - 创建文件系统时发生 I/O 错误
      SecurityException - 如果安装了安全管理器并且它拒绝文件系统提供程序实现所需的未指定权限
    • newFileSystem

      public static FileSystem  newFileSystem(Path  path, ClassLoader  loader) throws IOException
      构造一个新的 FileSystem 来访问文件的内容作为文件系统。

      此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。

      此方法首先尝试以与使用空映射的 newFileSystem(Path, Map, ClassLoader) 方法完全相同的方式定位已安装的提供程序。如果已安装的提供程序均未返回 FileSystem,则会尝试使用给定的类加载器定位提供程序。如果提供程序返回文件系统,则查找终止并返回文件系统。

      参数:
      path - 文件路径
      loader - 用于定位提供者的类加载器或 null 仅尝试定位已安装的提供者
      返回:
      一个新的文件系统
      抛出:
      ProviderNotFoundException - 如果无法找到支持此文件类型的提供程序
      ServiceConfigurationError - 加载服务提供商时发生错误
      IOException - 如果发生 I/O 错误
      SecurityException - 如果安装了安全管理器并且它拒绝未指定的权限
    • newFileSystem

      public static FileSystem  newFileSystem(Path  path, Map <String ,?> env) throws IOException
      构造一个新的 FileSystem 来访问文件的内容作为文件系统。

      此方法利用创建伪文件系统的专门提供程序,其中一个或多个文件的内容被视为文件系统。

      此方法首先尝试以与newFileSystem(Path, Map, ClassLoader) 方法完全相同的方式定位已安装的提供程序。如果找到,则调用提供者的 newFileSystem(Path, Map) 方法来构建新的文件系统。

      参数:
      path - 文件路径
      env - 用于配置文件系统的提供者特定属性的映射;可能是空的
      返回:
      一个新的文件系统
      抛出:
      ProviderNotFoundException - 如果无法找到支持此文件类型的提供程序
      ServiceConfigurationError - 加载服务提供商时发生错误
      IOException - 如果发生 I/O 错误
      SecurityException - 如果安装了安全管理器并且它拒绝未指定的权限
      自从:
      13
    • newFileSystem

      public static FileSystem  newFileSystem(Path  path) throws IOException
      构造一个新的 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