模块  java.base
软件包  java.nio.file

Class FileSystems


  • public final class FileSystems
    extends Object
    文件系统的工厂方法。 此类定义getDefault方法以获取默认文件系统和工厂方法以构造其他类型的文件系统。

    第一次调用此类定义的任何方法都会导致加载默认值provider 由URI方案“file”标识的默认提供程序创建FileSystem ,该提供程序提供对Java虚拟机可访问的文件系统的访问。 如果加载或初始化默认提供程序的过程失败,则会引发未指定的错误。

    第一次调用installedProviders方法,通过调用newFileSystem定义的任何newFileSystem方法,查找并加载所有已安装的文件系统提供程序。 使用ServiceLoader类定义的服务提供者加载工具加载已安装的提供程序。 使用系统类加载器加载已安装的提供程序。 如果找不到系统类加载器,则使用平台类加载器。 供应商通常是通过将它们放置在应用程序类路径上的JAR文件进行安装,JAR文件包含一个名为供应商的配置文件java.nio.file.spi.FileSystemProvider在资源目录META-INF/services ,该文件列出了一个或具体子类的更完全限定名称FileSystemProvider具有零参数构造函数。 安装的提供程序所在的顺序是特定于实现的。 如果提供者被实例化并且其getScheme返回先前实例化的提供者的相同URI方案,则丢弃最近实例化的副本。 在不考虑大小写的情况下比较URI方案。 在构造期间,提供者可以安全地访问与默认提供者相关联的文件,但是需要注意避免循环加载其他已安装的提供者。 如果检测到已安装的提供程序的循环加载,则会引发未指定的错误。

    此类还定义了允许在查找提供程序时指定ClassLoader工厂方法。 与安装的提供程序一样,通过将提供程序配置文件放在资源目录META-INF/services来标识提供程序类。

    如果线程启动已安装的文件系统提供程序的加载,而另一个线程调用也尝试加载提供程序的方法,则该方法将阻塞,直到加载完成。

    从以下版本开始:
    1.7
    • 方法详细信息

      • getDefault

        public static FileSystem getDefault()
        返回默认值FileSystem 默认文件系统创建的对象提供对Java虚拟机可访问的文件系统的访问。 文件系统的工作目录是当前用户目录,由系统属性user.dir命名。 这允许与java.io.File类的互操作性。

        第一次调用此类定义的任何方法都会找到默认的provider对象。 如果未定义系统属性java.nio.file.spi.DefaultFileSystemProvider则默认提供程序是调用以创建默认文件系统的系统默认提供程序。

        如果定义了系统属性java.nio.file.spi.DefaultFileSystemProvider ,则将其视为由URI方案"file"标识的具体提供者类的一个或多个完全限定名称的"file" 如果属性是多个名称的列表,则名称由逗号分隔。 使用系统类加载器加载每个类,并通过调用其形式参数类型为FileSystemProvider的一个参数构造函数进行实例化。 提供程序按属性中列出的顺序加载和实例化。 如果此过程失败或提供者的方案不等于"file"则会引发未指定的错误。 通常比较URI方案而不考虑大小写,但对于默认提供者,该方案必须是"file" 第一个提供程序类通过引用系统默认提供程序来调用它来实例化。 第二个提供程序类通过引用第一个提供程序实例来调用它来实例化。 第三个提供程序类通过引用第二个实例来调用它来实例化,依此类推。 要实例化的最后一个提供程序成为默认提供程序; 使用URI "file:///"调用其getFileSystem方法以获取对默认文件系统的引用。

        此方法的后续调用将返回第一次调用返回的文件系统。

        结果
        默认文件系统
      • 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"标识了提供者:

          Map<String,String> env = new HashMap<>();
           env.put("capacity", "16G");
           env.put("blockSize", "4k");
           FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), env); 
        参数
        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以访问文件的内容作为文件系统。

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

        此方法遍历installed提供程序。 反过来,它使用空映射调用每个提供程序的newFileSystem(Path,Map)方法。 如果提供程序返回文件系统,则迭代终止并返回文件系统。 如果没有安装的提供程序返回FileSystem则尝试使用给定的类加载器定位提供程序。 如果提供程序返回文件系统,则查找将终止,并返回文件系统。

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