Module  java.base
软件包  java.nio.file

Class FileSystems



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

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

    通过调用newFileSystem定义的任何newFileSystem方法,首次调用installedProviders方法可查找并加载所有已安装的文件系统提供程序。 使用由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虚拟机可访问的文件系统的对象。 文件系统的工作目录是当前的用户目录,由系统属性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 - 如果无法找到支持此文件类型的提供程序
        ServiceConfigurationError - 加载服务提供商时发生错误
        IOException - 如果发生I / O错误
        SecurityException - 如果安装了一个安全管理器,并且它拒绝了未指定的权限