- 类型参数:
-
T
- 迭代器返回的元素类型
- 所有超级接口:
-
AutoCloseable
,Closeable
,DirectoryStream<T>
,Iterable<T>
DirectoryStream
。一个SecureDirectoryStream
旨在供需要以无竞争方式遍历文件树或以其他方式在目录上操作的复杂或安全敏感的应用程序使用。当一系列文件操作无法独立进行时,可能会出现竞争条件。此接口定义的每个文件操作都指定了一个相对路径。无论目录是否在打开时被移动或被攻击者替换,对文件的所有访问都是相对于打开目录的。一个SecureDirectoryStream
也可以用作虚拟工作目录。
SecureDirectoryStream
需要底层操作系统相应的支持。如果实现支持此功能,则由newDirectoryStream
方法返回的DirectoryStream
将是一个SecureDirectoryStream
,必须将其转换为该类型才能调用此接口定义的方法。
对于默认的provider
,并且设置了安全管理器,则使用通过将给定相对路径解析为目录的原始路径执行权限检查(无论目录是否在打开后移动)。
- 自 JDK 版本:
- 1.7
-
Nested Class Summary
Nested classes/interfaces declared in interface java.nio.file.DirectoryStream
DirectoryStream.Filter<T>
-
Method Summary
Modifier and TypeMethodDescriptionvoid
deleteDirectory
(T path) 删除目录。void
deleteFile
(T path) 删除文件。<V extends FileAttributeView>
VgetFileAttributeView
(Class<V> type) 返回一个新的文件属性视图,以访问此目录的文件属性。<V extends FileAttributeView>
VgetFileAttributeView
(T path, Class<V> type, LinkOption... options) 返回一个新的文件属性视图,以访问此目录中文件的文件属性。void
move
(T srcpath, SecureDirectoryStream<T> targetdir, T targetpath) 将文件从此目录移动到另一个目录。newByteChannel
(T path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) 在此目录中打开或创建文件,返回一个可寻址的字节通道以访问文件。newDirectoryStream
(T path, LinkOption... options) 打开由给定路径标识的目录,返回一个SecureDirectoryStream
以迭代目录中的条目。Methods declared in interface java.nio.file.DirectoryStream
iterator
Methods declared in interface java.lang.Iterable
forEach, spliterator
-
Method Details
-
newDirectoryStream
打开由给定路径标识的目录,返回一个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
删除文件。与
delete()
方法不同,此方法不会首先检查文件以确定文件是否为目录。此方法删除目录取决于系统,因此未指定。如果文件是符号链接,则删除的是链接本身,而不是链接的最终目标。当参数为相对路径时,要删除的文件是相对于此打开目录的。- 参数:
-
path
- 要删除的文件的路径 - 抛出:
-
ClosedDirectoryStreamException
- 如果目录流已关闭 -
NoSuchFileException
- 如果文件不存在(可选特定异常) -
IOException
- 如果发生 I/O 错误 -
SecurityException
- 对于默认提供程序,并且安装了安全管理器,则调用checkDelete
方法来检查对文件的删除访问权限
-
deleteDirectory
删除目录。与
delete()
方法不同,此方法不会首先检查文件以确定文件是否为目录。此方法删除非目录取决于系统,因此未指定。当参数为相对路径时,要删除的目录是相对于此打开目录的。- 参数:
-
path
- 要删除的目录的路径 - 抛出:
-
ClosedDirectoryStreamException
- 如果目录流已关闭 -
NoSuchFileException
- 如果目录不存在(可选特定异常) -
DirectoryNotEmptyException
- 如果无法删除目录,因为目录不为空(可选特定异常) -
IOException
- 如果发生 I/O 错误 -
SecurityException
- 对于默认提供程序,并且安装了安全管理器,则调用checkDelete
方法来检查对目录的删除访问权限
-
move
将文件从此目录移动到另一个目录。当指定了
ATOMIC_MOVE
选项时,此方法的工作方式类似于move
方法。也就是说,此方法将文件作为原子文件系统操作移动。如果srcpath
参数是一个绝对
路径,则定位源文件。如果参数是相对路径,则相对于此打开目录进行定位。如果targetpath
参数是绝对路径,则定位目标文件(忽略targetdir
参数)。如果参数是相对路径,则相对于由targetdir
参数标识的打开目录进行定位。在所有情况下,如果目标文件存在,则实现特定的是替换还是此方法失败。- 参数:
-
srcpath
- 要移动的文件的名称 -
targetdir
- 目标目录 -
targetpath
- 目标目录中要给文件的名称 - 抛出:
-
ClosedDirectoryStreamException
- 如果此目录流或目标目录流已关闭 -
FileAlreadyExistsException
- 如果文件已存在于目标目录中且无法替换 (可选特定异常) -
AtomicMoveNotSupportedException
- 如果文件无法作为原子文件系统操作移动 -
IOException
- 如果发生 I/O 错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite
方法来检查对源文件和目标文件的写访问权限。
-
getFileAttributeView
返回一个新的文件属性视图,以访问此目录的文件属性。生成的文件属性视图可用于读取或更新此(打开的)目录的属性。
type
参数指定属性视图的类型,如果支持,则该方法返回该类型的实例。调用此方法以获取BasicFileAttributeView
总是返回绑定到此打开目录的该类的实例。生成的文件属性视图的状态与此目录流密切相关。一旦目录流
关闭
,那么所有读取或更新属性的方法都将抛出ClosedDirectoryStreamException
。- 类型参数:
-
V
-FileAttributeView
类型 - 参数:
-
type
- 与文件属性视图对应的Class
对象 - 返回:
-
绑定到此目录流的指定类型的新文件属性视图,如果属性视图类型不可用,则返回
null
-
getFileAttributeView
返回一个新的文件属性视图,以访问此目录中文件的文件属性。生成的文件属性视图可用于读取或更新此目录中文件的属性。
type
参数指定属性视图的类型,如果支持,则该方法返回该类型的实例。调用此方法以获取BasicFileAttributeView
总是返回绑定到目录中文件的该类的实例。生成的文件属性视图的状态与此目录流密切相关。一旦目录流
关闭
,那么所有读取或更新属性的方法都将抛出ClosedDirectoryStreamException
。在创建文件属性视图时,文件不需要存在,但是当调用方法读取或更新文件的属性时,如果文件不存在,则会失败。- 类型参数:
-
V
-FileAttributeView
类型 - 参数:
-
path
- 文件的路径 -
type
- 与文件属性视图对应的Class
对象 -
options
- 指示如何处理符号链接的选项 - 返回:
-
绑定到此目录流的指定类型的新文件属性视图,如果属性视图类型不可用,则返回
null
-