-
- All Superinterfaces:
-
AutoCloseable
,Closeable
,DirectoryStream<T>
,Iterable<T>
public interface SecureDirectoryStream<T> extends DirectoryStream<T>
ADirectoryStream
可以定义相对于打开目录定位的文件的操作。 ASecureDirectoryStream
旨在供复杂或安全敏感的应用程序使用,需要遍历文件树或以无竞争的方式操作目录。 当一系列文件操作不能单独执行时,可能会出现竞争条件。 由此接口定义的每个文件操作都指定相对路径。 无论目录何时被打开,目录被攻击者移动或替换,对文件的所有访问都是相对于打开的目录。 ASecureDirectoryStream
也可以用作虚拟工作目录 。A
SecureDirectoryStream
需要来自底层操作系统的相应支持。 在实现支持此功能的DirectoryStream
由newDirectoryStream
方法返回的DirectoryStream将为SecureDirectoryStream
并且必须转换为该类型才能调用此接口定义的方法。在默认情况下为
provider
,并且设置了安全管理器,则使用通过解决相对于目录的原始路径的给定相对路径而获得的路径来执行权限检查(不管该目录是否被打开以来是否被移动) )。- 从以下版本开始:
- 1.7
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface java.nio.file.DirectoryStream
DirectoryStream.Filter<T>
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 void
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)
将文件从该目录移动到另一个目录。SeekableByteChannel
newByteChannel(T path, Set<? extends OpenOption> options, FileAttribute<?>... attrs)
在此目录中打开或创建一个文件,返回可访问的字节通道以访问该文件。SecureDirectoryStream<T>
newDirectoryStream(T path, LinkOption... options)
打开由给定路径标识的目录,返回一个SecureDirectoryStream
以遍历目录中的条目。-
Methods inherited from interface java.nio.file.DirectoryStream
iterator
-
Methods inherited from interface 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(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
-
-