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

Class FileSystemProvider


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

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

    提供者是一个或多个FileSystem实例的工厂。 每个文件系统由URI标识,其中URI的方案与提供者的scheme匹配。 例如,默认文件系统由URI "file:///" 例如,基于存储器的文件系统可以由诸如"memory:///?name=logfs"的URI "memory:///?name=logfs" 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)方法来检查写访问
      • newByteChannel

        public abstract SeekableByteChannel newByteChannel​(Path path,                                                   Set<? extends OpenOption> options,                                                   FileAttribute<?>... attrs)                                            throws IOException
        打开或创建文件,返回可搜索的字节通道以访问该文件。 此方法完全按照Files.newByteChannel(Path,Set,FileAttribute[])方法指定的方式工作。
        参数
        path - 要打开或创建的文件的路径
        options - 指定文件打开方式的选项
        attrs - 创建文件时要自动设置的文件属性的可选列表
        结果
        一个新的可搜索字节通道
        异常
        IllegalArgumentException - 如果集合包含无效的选项组合
        UnsupportedOperationException - 如果指定了不受支持的打开选项,或者数组包含在创建文件时无法原子设置的属性
        FileAlreadyExistsException - 如果该名称的文件已存在且指定了 CREATE_NEW选项 (可选特定异常)
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用checkRead方法以检查文件打开以进行读取时对该路径的读取权限。 如果打开文件进行写入,则调用checkWrite方法来检查对路径的写访问。 如果使用DELETE_ON_CLOSE选项打开文件,则调用checkDelete方法来检查删除访问。
      • 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")
      • isSameFile

        public abstract boolean isSameFile​(Path path,                                   Path path2)                            throws IOException
        测试两个路径是否找到相同的文件。 此方法完全按照Files.isSameFile(java.nio.file.Path, java.nio.file.Path)方法指定的方式工作。
        参数
        path - 文件的一个路径
        path2 - 另一条路
        结果
        true当且仅当两个路径找到相同的文件时
        异常
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用 checkRead方法来检查对这两个文件的读取访问权限。
      • 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 -的实现,则需要支持检查READWRITEEXECUTE访问。 指定此异常以允许在将来的版本中扩展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方法拒绝对该文件的读访问权。 如果调用此方法来读取安全敏感属性,则可以调用安全管理器来检查其他权限。