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

Interface SecureDirectoryStream<T>

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


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

    A SecureDirectoryStream需要来自底层操作系统的相应支持。 在实现支持此功能的DirectoryStreamnewDirectoryStream方法返回的DirectoryStream将为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​(Class<V> type)
        返回一个新的文件属性视图来访问此目录的文件属性。

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

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

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

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

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

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

        参数类型
        V - FileAttributeView类型
        参数
        path - 文件的路径
        type - 对应于文件属性视图的 Class对象
        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