Module java.base
Package java.nio.file

Interface SecureDirectoryStream<T>

类型参数:
T - 迭代器返回的元素类型
所有超级接口:
AutoCloseable, Closeable, DirectoryStream<T>, Iterable<T>

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

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

对于默认的provider,并且设置了安全管理器,则使用通过将给定相对路径解析为目录的原始路径执行权限检查(无论目录是否在打开后移动)。

自 JDK 版本:
1.7
  • Method Details

    • newDirectoryStream

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

      此方法的工作方式与newDirectoryStream方法指定的方式完全相同,用于path参数为绝对路径的情况。当参数为相对路径时,要打开的目录是相对于此打开目录的。可以使用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
      在此目录中打开或创建文件,返回一个可寻址的字节通道以访问文件。

      此方法的工作方式与Files.newByteChannel方法指定的方式完全相同,用于path参数为绝对路径的情况。当参数为相对路径时,要打开或创建的文件是相对于此打开目录的。除了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 参数是一个 绝对 路径,则定位源文件。如果参数是相对路径,则相对于此打开目录进行定位。如果 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 总是返回绑定到此打开目录的该类的实例。

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

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

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

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

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

      类型参数:
      V - FileAttributeView 类型
      参数:
      path - 文件的路径
      type - 与文件属性视图对应的 Class 对象
      options - 指示如何处理符号链接的选项
      返回:
      绑定到此目录流的指定类型的新文件属性视图,如果属性视图类型不可用,则返回 null