java.nio.file.Files 有 5 种带有 OpenOption 可变参数的方法:
Files
.newBufferedWriter(...)
.write(...)
.newOutputStream(...)
.newInputStream(...)
.newByteChannel(...)
它们直接不限制任何OpenOption 组合,但它们都在后台调用java.nio.file.spi.FileSystemProvider 的这3 个方法中的一些方法:
FileSystemProvider
.newInputStream(Path, OpenOption...)
.newOutputStream(Path, OpenOption...)
.newByteChannel(Path, Set<? extends OpenOption>, FileAttribute<?>...)
FileSystemProvider.newInputStream(...) 被调用:Files.newInputStream(...)
FileSystemProvider.newOutputStream(...) 被调用:
Files
.newBufferedWriter(...)
.newOutputStream(...)
.write(...)
abstract FileSystemProvider.newByteChannel(...) 被调用:
-
Files.newByteChannel(...)
FileSystemProvider.newInputStream(...)
FileSystemProvider.newOutputStream(...)
OptenOption组合限制:
- FileSystemProvider.newInputStream(...)
- UnsupportedOperationException:写 ||追加
- FileSystemProvider.newOutputStream(...)
- 隐式:写
- IllegalArgumentException:读取
- 默认(如果没有选项):CREATE && TRUNCATE_EXISTING
abstract FileSystemProvider.newByteChannel(...) 方法有一个依赖于平台的实现,它可以扩展OpenOption 组合限制(如sun.nio.fs.WindowsFileSystemProvider)。
在底层使用OpenOption vargars 的All Files 方法以抽象FileSystemProvider.newByteChannel(...) 结尾,该实现取决于平台。因此,Files 方法中的OpenOption 组合限制取决于平台。