public interface SecureDirectoryStream<T> extends DirectoryStream<T>
DirectoryStream
,它定义了相对于打开的目录定位的文件的操作。
A SecureDirectoryStream
旨在供复杂或安全敏感的应用程序使用,需要遍历文件树或以无竞争的方式操作目录。
当一系列文件操作不能单独执行时,可能会出现竞争条件。
由此接口定义的每个文件操作都指定相对路径。
无论目录何时被打开,目录被攻击者移动或替换,对文件的所有访问都是相对于打开的目录。
A SecureDirectoryStream
也可以用作虚拟工作目录 。
A SecureDirectoryStream
需要基础操作系统的相应支持。 其中实现支持此功能则DirectoryStream
由返回newDirectoryStream
方法将是一个SecureDirectoryStream
和必须转换到该类型以调用由该接口定义的方法。
在默认情况下为provider
,并且设置了安全管理器,则使用通过针对目录的原始路径解析给定的相对路径而获得的路径来执行权限检查(不管目录是否被打开以来是否被移动) )。
DirectoryStream.Filter<T>
Modifier and Type | Method and Description |
---|---|
void |
deleteDirectory(T path)
删除目录。
|
void |
deleteFile(T path)
删除文件。
|
<V extends FileAttributeView> |
getFileAttributeView(类<V> type)
返回一个新的文件属性视图来访问此目录的文件属性。
|
<V extends FileAttributeView> |
getFileAttributeView(T path, 类<V> type, LinkOption... options)
返回一个新的文件属性视图来访问此目录中文件的文件属性。
|
void |
move(T srcpath, SecureDirectoryStream<T> targetdir, T targetpath)
将文件从该目录移动到另一个目录。
|
SeekableByteChannel |
newByteChannel(T path, Set<? extends OpenOption> options, FileAttribute<?>... attrs)
在此目录中打开或创建一个文件,返回可访问的字节通道以访问该文件。
|
SecureDirectoryStream<T> |
newDirectoryStream(T path, LinkOption... options)
打开由给定路径标识的目录,返回一个
SecureDirectoryStream 以遍历
SecureDirectoryStream 中的条目。
|
iterator
forEach, spliterator
SecureDirectoryStream<T> newDirectoryStream(T path, LinkOption... options) throws IOException
SecureDirectoryStream
以遍历SecureDirectoryStream
中的条目。
对于path
参数为absolute
路径的情况,此方法的工作原理与newDirectoryStream
方法规定的方式相同。 当参数是相对路径时,打开的目录是相对于此打开的目录。 如果文件是符号链接,则可以使用NOFOLLOW_LINKS
选项来确保此方法失败。
一旦创建,新的目录流不依赖于用于创建它的目录流。 关闭此目录流对新创建的目录流没有影响。
path
- 要打开的目录的路径
options
- 指示如何处理符号链接的选项
SecureDirectoryStream
对象
ClosedDirectoryStreamException
- 如果目录流关闭
NotDirectoryException
- 如果文件无法打开,因为它不是一个目录
(可选的特殊异常)
IOException
- 如果发生I / O错误
SecurityException
- 在默认提供程序和安全管理器的情况下,将调用
checkRead
方法来检查对该目录的读取访问。
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
方法来检查对路径的写入访问。
void deleteFile(T path) throws IOException
与delete()
方法不同,此方法不会首先检查文件以确定文件是否为目录。 是否通过此方法删除目录是系统依赖的,因此未指定。 如果文件是符号链接,则链接本身而不是链接的最终目标被删除。 当参数是相对路径时,要删除的文件是相对于此打开的目录。
path
- 要删除的文件的路径
ClosedDirectoryStreamException
- 如果目录流关闭
NoSuchFileException
- 如果文件不存在
(可选的特殊异常)
IOException
- 如果发生I / O错误
SecurityException
- 在默认提供程序和安全管理器的情况下,将调用
checkDelete
方法来检查对该文件的删除访问
void deleteDirectory(T path) throws IOException
与delete()
方法不同,此方法不会首先检查该文件以确定该文件是否为目录。 是否通过此方法删除非目录是系统依赖的,因此未指定。 当参数是相对路径时,要删除的目录是相对于此打开的目录。
path
- 要删除的目录的路径
ClosedDirectoryStreamException
- 如果目录流关闭
NoSuchFileException
- 如果目录不存在
(可选的特殊异常)
DirectoryNotEmptyException
- 如果该目录不能被删除,因为它不是空的
(可选的特殊异常)
IOException
- 如果发生I / O错误
SecurityException
- 如果是默认提供程序,并安装了安全管理器,则调用
checkDelete
方法来检查目录中的删除访问
void move(T srcpath, SecureDirectoryStream<T> targetdir, T targetpath) throws IOException
当指定ATOMIC_MOVE
选项时,此方法与move
方法类似。 也就是说,该方法将文件作为原子文件系统操作移动。 如果srcpath
参数是absolute
路径,那么它定位源文件。 如果参数是相对路径,那么它将相对于此打开的目录定位。 如果targetpath
参数是绝对的,则它定位目标文件(忽略targetdir
参数)。 如果参数是相对路径,它相对于由targetdir
参数标识的打开targetdir
定位。 在所有情况下,如果目标文件存在,那么如果被替换或该方法失败,那么它是实现特定的。
srcpath
- 要移动的文件的名称
targetdir
- 目的地目录
targetpath
- 在
targetpath
目录中提供文件的名称
ClosedDirectoryStreamException
- 如果这个或目标目录流关闭
FileAlreadyExistsException
- 如果文件已存在于目标目录中且无法替换
(可选的特殊异常)
AtomicMoveNotSupportedException
- 如果文件不能作为原子文件系统操作移动
IOException
- 如果发生I / O错误
SecurityException
- 在默认提供程序和安全管理器的情况下,将调用
checkWrite
方法来检查对源文件和目标文件的写入访问。
<V extends FileAttributeView> V getFileAttributeView(类<V> type)
生成的文件属性视图可用于读取或更新此(打开)目录的属性。 type
参数指定属性视图的类型,如果支持,该方法返回该类型的实例。 调用此方法以获取BasicFileAttributeView
始终返回绑定到此打开目录的该类的实例。
生成的文件属性视图的状态与此目录流密切相关。 一旦目录流是closed
,那么读取或更新属性的所有方法将会抛出ClosedDirectoryStreamException
。
V
-
FileAttributeView
类型
type
- 对应于文件属性视图的
类
对象
null
如果属性视图类型不可用
<V extends FileAttributeView> V getFileAttributeView(T path, 类<V> type, LinkOption... options)
生成的文件属性视图可用于读取或更新此目录中文件的属性。 type
参数指定属性视图的类型,如果支持,该方法返回该类型的实例。 调用此方法来获取一个BasicFileAttributeView
总是返回绑定到目录中文件的该类的一个实例。
生成的文件属性视图的状态与此目录流密切相关。 一旦目录流closed
,那么所有方法读取或更新属性将抛出ClosedDirectoryStreamException
。 在创建文件属性视图时,该文件不需要存在,但是在调用文件并且文件不存在时,读取或更新文件属性的方法将失败。
V
-
FileAttributeView
类型
path
- 文件的路径
type
- 对应于文件属性视图的
类
对象
options
- 指示如何处理符号链接的选项
null
if the attribute view type is not available