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

Interface SecureDirectoryStream<T>

  • All Superinterfaces:
    AutoCloseableCloseableDirectoryStream<T>Iterable<T>

    public interface SecureDirectoryStream<T>
    extends DirectoryStream<T>
    DirectoryStream ,用于定义相对于打开目录的文件的操作。 SecureDirectoryStream旨在供复杂或安全敏感的应用程序使用,这些应用程序需要遍历文件树或以无种族方式操作目录。 当一系列文件操作不能单独执行时,可能会出现竞争条件。 此接口定义的每个文件操作都指定相对路径。 无论在目录打开时是否由攻击者移动或替换目录,对文件的所有访问都与开放目录相关。 SecureDirectoryStream也可以用作虚拟工作目录

    SecureDirectoryStream需要来自底层操作系统的相应支持。 其中实现支持此功能则DirectoryStream由返回newDirectoryStream方法将是一个SecureDirectoryStream和必须转换到该类型以调用由该接口定义的方法。

    如果是默认值provider ,并且设置了安全管理器,则使用通过解析目录的原始路径的给定相对路径获得的路径执行权限检查(无论目录是否已打开,因为它已被打开)。

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

      • newDirectoryStream

        SecureDirectoryStream<T> newDirectoryStream​(T path,
                                                    LinkOption... options)
                                             throws IOException
        打开由给定路径标识的目录,返回SecureDirectoryStream以迭代目录中的条目。

        对于path参数为absolute路径的情况,此方法完全按照newDirectoryStream方法指定的方式工作。 当参数是相对路径时,打开的目录相对于此打开的目录。 如果文件是符号链接,则可以使用NOFOLLOW_LINKS选项来确保此方法失败。

        新目录流一旦创建,就不依赖于用于创建它的目录流。 关闭此目录流对新创建的目录流没有影响。

        参数
        path - 要打开的目录的路径
        options - 指示如何处理符号链接的选项
        结果
        一个新的,打开的 SecureDirectoryStream对象
        异常
        ClosedDirectoryStreamException - 如果目录流已关闭
        NotDirectoryException - 如果无法以其他方式打开文件,因为它不是目录 (可选的特定异常)
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用 checkRead方法来检查对目录的读取权限。
      • newByteChannel

        SeekableByteChannel newByteChannel​(T path,
                                           Set<? extends OpenOption> options,
                                           FileAttribute<?>... attrs)
                                    throws IOException
        在此目录中打开或创建文件,返回可搜索的字节通道以访问该文件。

        对于path参数为absolute路径的情况,此方法完全按照Files.newByteChannel方法指定的方式工作。 当参数是相对路径时,要打开或创建的文件是相对于此打开目录的。 除了Files.newByteChannel方法定义的选项之外,如果文件是符号链接,则可以使用NOFOLLOW_LINKS选项来确保此方法失败。

        通道一旦创建,就不依赖于用于创建它的目录流。 关闭此目录流对通道没有影响。

        参数
        path - 要打开或创建的文件的路径
        options - 指定文件打开方式的选项
        attrs - 创建文件时以原子方式设置的可选属性列表
        结果
        可搜索的字节通道
        异常
        ClosedDirectoryStreamException - 如果目录流已关闭
        IllegalArgumentException - 如果集合包含无效的选项组合
        UnsupportedOperationException - 如果指定了不受支持的打开选项,或者数组包含在创建文件时无法原子设置的属性
        FileAlreadyExistsException - 如果该名称的文件已存在且指定了 CREATE_NEW选项 (可选的特定异常)
        IOException - 如果发生I / O错误
        SecurityException - 对于默认提供程序,并且安装了安全管理器,如果打开文件进行读取,则调用checkRead方法以检查对路径的读访问权。 如果打开文件进行写入,则调用checkWrite方法来检查对路径的写访问。
      • deleteFile

        void deleteFile​(T path)
                 throws IOException
        删除文件。

        delete()方法不同,此方法不首先检查文件以确定文件是否是目录。 此方法是否删除目录取决于系统,因此未指定。 如果文件是符号链接,则删除链接本身,而不是链接的最终目标。 当参数是相对路径时,要删除的文件是相对于此打开目录的。

        参数
        path - 要删除的文件的路径
        异常
        ClosedDirectoryStreamException - 如果目录流已关闭
        NoSuchFileException - 如果文件不存在 (可选的特定异常)
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用 checkDelete方法来检查对文件的删除访问权限
      • deleteDirectory

        void deleteDirectory​(T path)
                      throws IOException
        删除目录。

        delete()方法不同,此方法不首先检查文件以确定文件是否是目录。 此方法是否删除非目录是系统相关的,因此未指定。 当参数是相对路径时,要删除的目录是相对于此打开目录的。

        参数
        path - 要删除的目录的路径
        异常
        ClosedDirectoryStreamException - 如果目录流已关闭
        NoSuchFileException - 如果目录不存在 (可选的特定异常)
        DirectoryNotEmptyException - 如果无法删除目录,因为它不为空 (可选的特定异常)
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用 checkDelete方法来检查对目录的删除访问权限
      • move

        void move​(T srcpath,
                  SecureDirectoryStream<T> targetdir,
                  T targetpath)
           throws IOException
        将文件从此目录移动到另一个目录。

        当指定ATOMIC_MOVE选项时,此方法的工作方式与move方法类似。 也就是说,此方法将文件移动为原子文件系统操作。 如果srcpath参数是absolute路径,则它将找到源文件。 如果参数是相对路径,则它相对于此打开目录而定位。 如果targetpath参数是绝对的,则它将找到目标文件(忽略targetdir参数)。 如果参数是相对路径,则它相对于targetdir参数标识的打开目录。 在所有情况下,如果目标文件存在,那么如果替换它或者此方法失败,则它是特定于实现的。

        参数
        srcpath - 要移动的文件的名称
        targetdir - 目标目录
        targetpath - 在目标目录中提供文件的名称
        异常
        ClosedDirectoryStreamException - 如果关闭此目标目录流或目标目录流
        FileAlreadyExistsException - 如果文件已存在于目标目录中且无法替换 (可选特定异常)
        AtomicMoveNotSupportedException - 如果文件无法作为原子文件系统操作移动
        IOException - 如果发生I / O错误
        SecurityException - 如果是默认提供程序,并且安装了安全管理器,则会调用 checkWrite方法来检查源文件和目标文件的写访问权。
      • getFileAttributeView

        <V extends FileAttributeView> V getFileAttributeView​(<V> type)
        返回新的文件属性视图以访问此目录的文件属性。

        生成的文件属性视图可用于读取或更新此(打开)目录的属性。 type参数指定属性视图的类型,如果支持,该方法将返回该类型的实例。 调用此方法以获取BasicFileAttributeView始终返回绑定到此打开目录的该类的实例。

        生成的文件属性视图的状态与此目录流密切相关。 目录流为closed ,所有读取或更新属性的方法都将抛出ClosedDirectoryStreamException

        参数类型
        V - FileAttributeView类型
        参数
        type - 与文件属性视图对应的 对象
        结果
        绑定到此目录流的指定类型的新文件属性视图,如果属性视图类型不可用, null
      • getFileAttributeView

        <V extends FileAttributeView> V getFileAttributeView​(T path,
                                                             <V> type,
                                                             LinkOption... options)
        返回一个新的文件属性视图,以访问此目录中文件的文件属性。

        生成的文件属性视图可用于读取或更新此目录中文件的属性。 type参数指定属性视图的类型,如果支持,该方法返回该类型的实例。 调用此方法以获取BasicFileAttributeView始终返回绑定到目录中文件的该类的实例。

        生成的文件属性视图的状态与此目录流密切相关。 一旦目录流closed ,那么所有读取或更新属性的方法都会抛出ClosedDirectoryStreamException 创建文件属性视图时不需要存在该文件,但是在调用且文件不存在时,读取或更新文件属性的方法将失败。

        参数类型
        V - FileAttributeView类型
        参数
        path - 文件的路径
        type - 与文件属性视图对应的 对象
        options - 指示如何处理符号链接的选项
        结果
        a new file attribute view of the specified type bound to a this directory stream, or null if the attribute view type is not available