-
- All Superinterfaces:
-
AutoCloseable
,Closeable
,DirectoryStream<T>
,Iterable<T>
public interface SecureDirectoryStream<T> extends DirectoryStream<T>
DirectoryStream
,用于定义相对于打开目录的文件的操作。SecureDirectoryStream
旨在供复杂或安全敏感的应用程序使用,这些应用程序需要遍历文件树或以无种族方式操作目录。 当一系列文件操作不能单独执行时,可能会出现竞争条件。 此接口定义的每个文件操作都指定相对路径。 无论在目录打开时是否由攻击者移动或替换目录,对文件的所有访问都与开放目录相关。SecureDirectoryStream
也可以用作虚拟工作目录 。SecureDirectoryStream
需要来自底层操作系统的相应支持。 其中实现支持此功能则DirectoryStream
由返回newDirectoryStream
方法将是一个SecureDirectoryStream
和必须转换到该类型以调用由该接口定义的方法。如果是默认值
provider
,并且设置了安全管理器,则使用通过解析目录的原始路径的给定相对路径获得的路径执行权限检查(无论目录是否已打开,因为它已被打开)。- 从以下版本开始:
- 1.7
-
-
嵌套类汇总
-
Nested classes/interfaces declared in interface java.nio.file.DirectoryStream
DirectoryStream.Filter<T>
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 void
deleteDirectory(T path)
删除目录。void
deleteFile(T path)
删除文件。<V extends FileAttributeView>
VgetFileAttributeView(类<V> type)
返回新的文件属性视图以访问此目录的文件属性。<V extends FileAttributeView>
VgetFileAttributeView(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
以迭代目录中的条目。-
声明方法的接口 java.nio.file.DirectoryStream
iterator
-
声明方法的接口 java.lang.Iterable
forEach, spliterator
-
-
-
-
方法详细信息
-
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
-
-