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

Class FileSystemProvider



  • public abstract class FileSystemProvider
    extends Object
    文件系统的服务提供者类。 Files类定义的方法通常会委托给该类的一个实例。

    文件系统提供程序是实现由该类定义的抽象方法的该类的具体实现。 提供者由URI识别scheme 默认提供程序由URI方案“文件”标识。 它创建了可以访问Java虚拟机可访问的文件系统的FileSystem FileSystems类定义文件系统提供程序的位置和加载方式。 默认提供程序通常是系统默认提供程序,但如果系统属性java.nio.file.spi.DefaultFileSystemProviderjava.nio.file.spi.DefaultFileSystemProvider则可能会被覆盖。 在这种情况下,提供程序具有一个参数构造函数,其形式参数类型为FileSystemProvider 所有其他提供程序都有一个零参数构造函数来初始化提供程序。

    提供商是一个或多个FileSystem实例的工厂。 每个文件系统由URI标识,其URI的方案与提供商的scheme相匹配。 例如,默认文件系统由URI "file:///" 例如,基于存储器的文件系统可以由诸如"memory:///?name=logfs"的URI来标识。 可以使用newFileSystem方法来创建文件系统,并且可以使用getFileSystem方法来获取对由提供者创建的现有文件系统的引用。 如果提供商是单个文件系统的工厂,那么如果在提供程序初始化时创建文件系统,或稍后在调用newFileSystem方法时,则依赖于提供程序。 在默认提供程序的情况下, FileSystem是在提供程序初始化时创建的。

    此类中的所有方法都可以安全地被多个并发线程使用。

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

      • FileSystemProvider

        protected FileSystemProvider​()
        初始化此类的新实例。

        在施工期间,提供商可以安全地访问与默认提供商相关的文件,但需要注意避免其他已安装提供程序的循环加载。 如果检测到已安装提供程序的循环加载,则会抛出未指定的错误。

        异常
        SecurityException - 如果安全管理员已经安装,并且它拒绝RuntimePermission ("fileSystemProvider")
    • 方法详细信息

      • installedProviders

        public static List<FileSystemProvider> installedProviders​()
        返回已安装文件系统提供程序的列表。

        首先调用此方法会导致默认提供程序被初始化(如果尚未初始化),并加载由FileSystems类描述的任何其他已安装的提供程序。

        结果
        已安装的文件系统提供程序的不可修改的列表。 该列表至少包含一个元素,即默认文件系统提供程序
        异常
        ServiceConfigurationError - 加载服务提供商时发生错误
      • getScheme

        public abstract String getScheme​()
        返回标识此提供程序的URI方案。
        结果
        URI方案
      • newFileSystem

        public abstract FileSystem newFileSystem​(URI uri,
                                                 Map<String,?> env)
                                          throws IOException
        构造由URI标识的新的FileSystem对象。 该方法由FileSystems.newFileSystem(URI,Map)方法调用以打开由URI标识的新文件系统。

        uri参数是一个绝对的分层URI,其方案与此提供程序支持的方案相等(不考虑情况)。 URI的确切形式依赖于高度依赖于提供商。 env参数是配置文件系统的提供程序特定属性的映射。

        如果文件系统已经存在,则此方法将抛出FileSystemAlreadyExistsException ,因为它以前是通过调用此方法创建的。 一旦文件系统是closed ,如果提供程序允许使用与之前创建的文件系统相同的URI创建新文件系统,则依赖于提供程序。

        参数
        uri - URI参考
        env - 配置文件系统的提供程序特定属性的映射; 可能是空的
        结果
        一个新的文件系统
        异常
        IllegalArgumentException - 如果 uri参数的前提条件未满足,或 env参数不包含提供程序所需的属性,或属性值无效
        IOException - 创建文件系统时出现I / O错误
        SecurityException - 如果安装了安全管理器,并且它拒绝文件系统提供程序实现所需的未指定的权限
        FileSystemAlreadyExistsException - 如果文件系统已创建
      • getFileSystem

        public abstract FileSystem getFileSystem​(URI uri)
        返回此提供商创建的现有FileSystem

        此方法返回到基准FileSystem这是通过调用创建newFileSystem(URI,Map)方法。 创建newFileSystem(Path,Map)方法的文件系统不会由此方法返回。 文件系统由其URI标识。 其确切形式依赖于提供商。 在默认提供程序的情况下,URI的路径组件为"/" ,并且权限,查询和片段组件未定义(未定义的组件由null表示)。

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

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

        参数
        uri - URI引用
        结果
        文件系统
        异常
        IllegalArgumentException - 如果不符合 uri参数的前提条件
        FileSystemNotFoundException - 如果文件系统不存在
        SecurityException - 如果安装了一个安全管理器,并且它拒绝了未指定的权限。
      • getPath

        public abstract Path getPath​(URI uri)
        通过转换给定的URI返回一个Path对象。 所产生的Path与已经存在或自动构建的FileSystem相关联。

        URI的确切形式是文件系统提供者依赖。 在默认提供程序的情况下,URI方案为"file" ,给定的URI具有非空路径组件,未定义的查询和片段组件。 由此产生的Path与默认值default FileSystem相关联。

        如果安装了一个安全管理器,那么提供者实现可能需要检查许可。 default文件系统的情况下,不需要进行权限检查。

        参数
        uri - 要转换的URI
        结果
        结果 Path
        异常
        IllegalArgumentException - 如果URI方案不标识此提供程序或uri参数的其他前提条件不成立
        FileSystemNotFoundException - 由URI标识的文件系统不存在,不能自动创建
        SecurityException - 如果安装了安全管理器,并且拒绝了未指定的权限。
      • newFileSystem

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

        该方法适用于将一个或多个文件的内容视为文件系统的伪文件系统的专门提供商。 env参数是配置文件系统的提供程序特定属性的映射。

        如果此提供程序不支持创建此类文件系统,或者如果提供程序无法识别给定文件的文件类型,则它将抛出UnsupportedOperationException 此方法的默认实现将抛出UnsupportedOperationException

        参数
        path - 文件的路径
        env - 配置文件系统的提供者特定属性的映射; 可能是空的
        结果
        一个新的文件系统
        异常
        UnsupportedOperationException - 如果此提供商不支持以文件系统的形式访问内容,或者不识别给定文件的文件类型
        IllegalArgumentException - 如果 env参数不包含提供程序所需的属性,或属性值无效
        IOException - 如果发生I / O错误
        SecurityException - 如果安装了一个安全管理器,并且它拒绝了未指定的权限。
      • newFileChannel

        public FileChannel newFileChannel​(Path path,
                                          Set<? extends OpenOption> options,
                                          FileAttribute<?>... attrs)
                                   throws IOException
        打开或创建用于读取和/或写入的文件,返回文件通道以访问该文件。 该方法的工作原理与FileChannel.open方法规定的方式相同 不支持构建文件通道所需的所有功能的提供者将抛出UnsupportedOperationException 默认提供程序需要支持创建文件通道。 当不覆盖时,默认实现将抛出UnsupportedOperationException
        参数
        path - 打开或创建文件的路径
        options - 指定文件打开方式的选项
        attrs - 创建文件时以原子方式设置的文件属性的可选列表
        结果
        一个新的文件通道
        异常
        IllegalArgumentException - 如果集合包含无效的选项组合
        UnsupportedOperationException - 如果此提供程序不支持创建文件通道,或指定不受支持的打开选项或文件属性
        IOException - 如果发生I / O错误
        SecurityException - 在默认文件系统的情况下,如果打开文件进行读取,则调用SecurityManager.checkRead(String)方法来检查读取访问。 如果打开文件写入,则调用SecurityManager.checkWrite(String)方法来检查写访问
      • newAsynchronousFileChannel

        public AsynchronousFileChannel newAsynchronousFileChannel​(Path path,
                                                                  Set<? extends OpenOption> options,
                                                                  ExecutorService executor,
                                                                  FileAttribute<?>... attrs)
                                                           throws IOException
        打开或创建用于读取和/或写入的文件,返回异步文件通道以访问该文件。 该方法的工作原理与AsynchronousFileChannel.open方法规定的方式相同 不支持构建异步文件通道所需的所有功能的提供程序将抛出UnsupportedOperationException 需要默认提供程序来支持创建异步文件通道。 当不被覆盖时,此方法的默认实现将抛出UnsupportedOperationException
        参数
        path - 要打开或创建文件的路径
        options - 指定文件打开方式的选项
        executor - 线程池或 null将通道与默认线程池相关联
        attrs - 创建文件时以原子方式设置的文件属性的可选列表
        结果
        一个新的异步文件通道
        异常
        IllegalArgumentException - 如果集合包含无效的选项组合
        UnsupportedOperationException - 如果此提供程序不支持创建异步文件通道,或者指定不支持的打开选项或文件属性
        IOException - 如果发生I / O错误
        SecurityException - 在默认文件系统的情况下,如果文件打开以供阅读,则调用SecurityManager.checkRead(String)方法来检查读访问。 如果打开文件写入,则调用SecurityManager.checkWrite(String)方法来检查写访问
      • readSymbolicLink

        public Path readSymbolicLink​(Path link)
                              throws IOException
        读取符号链接的目标。 此方法的工作原理与Files.readSymbolicLink(java.nio.file.Path)方法规定的方式相同

        此方法的默认实现将抛出UnsupportedOperationException

        参数
        link - 符号链接的路径
        结果
        符号链接的目标
        异常
        UnsupportedOperationException - 如果实现不支持符号链接
        NotLinkException - 如果目标文件不能被读取,因为该文件不是符号链接 (可选的特殊异常)
        IOException - 如果发生I / O错误
        SecurityException -在默认的供应商,安全管理器的情况下被安装,它会检查 FilePermission已被授予的“ readlink ”的行动阅读的链接。
      • copy

        public abstract void copy​(Path source,
                                  Path target,
                                  CopyOption... options)
                           throws IOException
        将文件复制到目标文件。 该方法的工作原理与Files.copy(Path,Path,CopyOption[])方法规定的方式相同,只是源路径和目标路径必须与此提供程序相关联。
        参数
        source - 要复制的文件的路径
        target - 目标文件的路径
        options - 指定应如何完成副本的选项
        异常
        UnsupportedOperationException - 如果数组包含不支持的副本选项
        FileAlreadyExistsException - 如果目标文件存在但无法替换,因为未指定 REPLACE_EXISTING选项 (可选特定异常)
        DirectoryNotEmptyException - 指定了 REPLACE_EXISTING选项,但是由于它是非空目录 (可选的特殊异常),因此无法替换该文件。
        IOException - 如果发生I / O错误
        SecurityException - 在默认提供程序和安全管理器的情况下,将调用checkRead方法来检查对源文件的读取访问,调用checkWrite以检查对目标文件的写入访问。 如果复制了符号链接,则调用安全管理器来检查LinkPermission ("symbolic")
      • isHidden

        public abstract boolean isHidden​(Path path)
                                  throws IOException
        告知文件是否被隐藏 此方法的工作原理与Files.isHidden(java.nio.file.Path)方法规定的方式相同

        该方法由isHidden方法调用。

        参数
        path - 要测试文件的路径
        结果
        true如果文件被认为是隐藏的
        异常
        IOException - 如果发生I / O错误
        SecurityException - 在默认提供程序和安全管理器的情况下,将调用 checkRead方法来检查对该文件的读取访问。
      • checkAccess

        public abstract void checkAccess​(Path path,
                                         AccessMode... modes)
                                  throws IOException
        检查文件的存在,以及可选的可访问性。

        这种方法可以由使用isReadableisWritableisExecutable方法来检查的文件的可访问性。

        该方法检查文件的存在,并且该Java虚拟机具有适当的权限,允许其根据modes参数中指定的所有访问模式访问该文件,如下所示:

        Access Modes Value Description READ Checks that the file exists and that the Java virtual machine has permission to read the file. WRITE Checks that the file exists and that the Java virtual machine has permission to write to the file, EXECUTE Checks that the file exists and that the Java virtual machine has permission to execute the file. The semantics may differ when checking access to a directory. For example, on UNIX systems, checking for EXECUTE access checks that the Java virtual machine has permission to search the directory in order to access file or subdirectories.

        如果modes参数的长度为零,则检查文件的存在。

        如果此对象引用的文件是符号链接,则此方法遵循符号链接。 根据实现,此方法可能需要读取文件权限,访问控制列表或其他文件属性,以便检查对文件的有效访问。 要确定对文件的有效访问可能需要访问多个属性,因此在某些实现中,该方法可能不是相对于其他文件系统操作的原子。

        参数
        path - 要检查的文件的路径
        modes - 检查的访问模式; 可能有零个元素
        异常
        UnsupportedOperationException -的实现,则需要支持检查READWRITE ,并EXECUTE访问。 此异常被指定为允许在将来的版本中扩展Access枚举。
        NoSuchFileException - 如果文件不存在 (可选特定异常)
        AccessDeniedException - 所请求的访问将被拒绝或无法确定访问,因为Java虚拟机没有足够的权限或其他原因。 (可选具体例外)
        IOException - 如果发生I / O错误
        SecurityException -在安装的默认提供的情况,以及安全管理器,该 checkRead被检查时读访问文件或只有文件的存在,调用 checkWrite检查该文件的写访问时被调用,并 checkExec在检查执行访问时被调用。
      • readAttributes

        public abstract Map<String,Object> readAttributes​(Path path,
                                                          String attributes,
                                                          LinkOption... options)
                                                   throws IOException
        读取一组文件属性作为批量操作。 此方法的工作原理与Files.readAttributes(Path,String,LinkOption[])方法规定的方式相同
        参数
        path - 文件的路径
        attributes - 要读取的属性
        options - 表示如何处理符号链接的选项
        结果
        返回属性的地图; 可能是空的。 地图的键是属性名称,其值是属性值
        异常
        UnsupportedOperationException - 如果属性视图不可用
        IllegalArgumentException - 如果没有指定属性或指定了无法识别的属性
        IOException - 如果发生I / O错误
        SecurityException - 在默认提供程序的情况下,安装了一个安全管理器,其checkRead方法拒绝对该文件的读取访问。 如果调用此方法来读取安全敏感属性,则可能会调用安全管理器来检查其他权限。