根据文档,
StandardOpenOption.APPEND
似乎需要StandardOpenOption.WRITE
。
访问,则字节将写入文件末尾而不是开头。WRITE
如果其他程序打开文件进行写访问,则写入文件末尾的操作是原子的,则它是特定于文件系统的。
这是真的吗?
StandardOpenOption.APPEND
进行了测试,它有效。
@Test
void __(@TempDir final Path dir) throws Exception {
final var path = Files.createTempFile(dir, null, null);
final var b = ByteBuffer.allocate(12);
try (var channel = FileChannel.open(path, StandardOpenOption.APPEND)) {
while (b.hasRemaining()) {
channel.write(b);
}
channel.force(true);
}
Assertions.assertEquals(Files.size(path), b.capacity());
}
评论是什么意思?
访问,则字节将写入文件末尾而不是开头。WRITE
答案就在 FileChannel#open(path, options, attrs)。
选项 | 描述 |
---|---|
追加 | 如果存在此选项,则打开文件进行写入,并且每次调用通道的写入方法首先将位置前进到文件末尾,然后写入请求的数据。位置的推进和数据的写入是否在单个原子操作中完成是系统相关的,因此未指定。使用此选项在给定位置写入的效果未指定。此选项不得与 或 选项一起使用。 |
... | ... |