【发布时间】:2017-05-05 10:32:08
【问题描述】:
我有一个程序将一些对象临时保存到我的硬盘上,几分钟后才重新加载:
这是方法:
private void save(Object myObject, String path) throws IOException {
final BufferedOutputStream bf = new BufferedOutputStream(
new FileOutputStream(path));
final ObjectOutputStream objOut = new ObjectOutputStream(bf);
objOut.writeUnshared(myObject);
bf.close();
bf.flush();
objOut.flush();
objOut.reset();
}
问题是我能够在运行时从磁盘中删除文件,并在稍后以 NoSuchFileException 结束: 如何防止这种情况发生?
我也尝试过使用
objOut.writeObject(myObject);
而不是
objOut.writeUnshared(myObject);
但还是什么都没有……
有人可以帮助我吗?谢谢!
编辑阅读 cmets 以获得更详细的请求描述!
【问题讨论】:
-
可以实现文件锁。看看here。
-
听起来可能是XY-problem。当同一个应用程序重新加载对象时,为什么要将对象序列化到文件系统?你为什么假设用户会在它们存在的短时间内删除这些文件?
-
@AbhishekPathak 来自 FileLock 的 java doc:锁是否实际上阻止另一个程序访问锁定区域的内容取决于系统,因此未指定。某些系统的本机文件锁定功能只是建议性的,这意味着程序必须协同遵守已知的锁定协议以保证数据完整性
-
@AndréStannek 我正在编写一个必须生成数十亿整数的程序,因此我将它们临时存储在很多数组中,保存它们,并在需要时重新加载数组:也许我做到了不能很好地表达自己,我 DO NOT CLOSE 在数组的保存和重新加载之间的应用程序,我只想在文件和我的程序之间临时绑定,当应用程序关闭时消失,然后有人 如果他愿意,可以删除文件。