我使用 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));
}
}
在 Windows 上,我看到了我所期望的,即true false
。在 Linux 上我看到false false
。是预期的吗?难道我做错了什么?
文件被过早删除的事实是有问题的,因为我需要在写入文件后测试它的大小。
我在 Linux 和 Windows 上使用 jdk7u25,并且可以在装有 RedHat 或 ArchLinux 的机器上重现。
编辑:即使我在再次调用 os.write() 之前测试文件是否存在,我也会被告知该文件不再存在。如果我用以下命令打开文件CREATE
选项,然后我会看到true true
.
看起来 Linux JVM 会在您打开文件后立即将其删除,这是有道理的,因为您可以在 Linux 上执行此操作。我也将采用这种方式来实现它。您必须自己跟踪文件中写入了多少内容,例如通过插入一个FilterOutputStream
计算字节数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)