【问题标题】:How to prevent someone from deleting files that my program is currently using?如何防止有人删除我的程序当前正在使用的文件?
【发布时间】: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 在数组的保存和重新加载之间的应用程序,我只想在文件和我的程序之间临时绑定,当应用程序关闭时消失,然后有人 如果他愿意,可以删除文件。

标签: java file exception


【解决方案1】:

基本上你不能,但你可以通过以下方式缓解这个问题:

  • 创建一个特定的系统用户来执行您的 java 应用程序
  • 创建一个仅对该系统用户可见的文件夹
  • 与该用户一起启动您的 Java 应用程序

这可以缓解问题,因为人类始终可以登录之前定义的系统用户,因此可以完全控制私有文件。

您还可以隐藏保存文件的目录,使人更难删除它们。

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 2017-01-16
    • 2023-02-08
    • 1970-01-01
    • 2018-07-28
    • 2011-11-27
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多