我使用Java 7 nio API获得以下代码:
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class TestDeleteOnClose {
public static void main(String[] args) throws IOException {
Path tmp = Files.createTempFile("a", "b");
OutputStream out = Files.newOutputStream(tmp, StandardOpenOption.DELETE_ON_CLOSE);
ObjectOutputStream os = new ObjectOutputStream(out);
os.write(0);
os.flush();
System.out.println(Files.exists(tmp));
os.close();
System.out.println(Files.exists(tmp));
}
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,我看到了我的期望,即true false.在Linux上我看到了false false.这是预期的吗?难道我做错了什么?文件被过早删除的事实是有问题的,因为我需要测试它的大小,例如在写入之后.
我在Linux和Windows上使用jdk7u25,并且可以在具有RedHat或ArchLinux的机器上重现.
编辑:即使我在另一次调用os.write()之前测试文件是否存在,我被告知该文件不再存在.如果我用CREATE选项打开文件,那么我会看到true true.
看起来Linux JVM会在您打开文件后立即删除该文件,这在Linux上可以实现.这就是我实现它的方式.你必须自己跟踪已经写入文件的数量,例如插入一个FilterOutputStream计数字节.
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |