互联网上有很多例子显示如何使用StandardOpenOption.DELETE_ON_CLOSE,例如:
Files.write(myTempFile, ..., StandardOpenOption.DELETE_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)
其他示例类似地使用Files.newOutputStream(..., StandardOpenOption.DELETE_ON_CLOSE).
我怀疑所有这些例子都可能存在缺陷.写一个文件的目的是你要在某个时候读回来; 否则,为什么还要写呢?但是,在您有机会阅读之前,DELETE_ON_CLOSE会不会导致文件被删除?
如果你创建一个工作文件(用于处理太大而无法保留在内存中的大量数据),那么你不会使用RandomAccessFile它,它允许读写访问吗?但是,RandomAccessFile据我所知,并没有为您提供指定DELETE_ON_CLOSE的选项.
那么有人能告诉我DELETE_ON_CLOSE 实际上有用吗?
以下是它的两种可能的使用方式:
该方法返回一个适合读写的 SeekableByteChannel ,其中当前位置可以修改。
对于需要将某些数据存储在内存之外以进行读/写访问并且在应用程序关闭后不需要保留的情况似乎非常有用。
使用任意文本文件的示例:
Path p = Paths.get("C:\\test", "foo.txt");
System.out.println(Files.exists(p));
try {
Files.createFile(p);
System.out.println(Files.exists(p));
try (BufferedWriter out = Files.newBufferedWriter(p, Charset.defaultCharset(), StandardOpenOption.DELETE_ON_CLOSE)) {
out.append("Hello, World!");
out.flush();
try (BufferedReader in = Files.newBufferedReader(p, Charset.defaultCharset())) {
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println(Files.exists(p));
Run Code Online (Sandbox Code Playgroud)
输出(如预期):
false
true
Hello, World!
false
Run Code Online (Sandbox Code Playgroud)
这个例子显然是微不足道的,但我想在很多情况下这种方法可能会派上用场。
但是,我仍然相信旧File.deleteOnExit方法可能更可取,因为您也不需要在文件上的任何读取操作期间保持输出流打开。
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |