5

我有一段 JAVA 代码,它读取一些文件并将它们加载到内存中一段时间​​。文件句柄在读取后保留。我的问题是我想限制用户使用“DEL”键或 rm 命令删除这些文件。

我可以通过保留文件句柄在 Windows 上实现相同的目的,而在 Unix rm 上不遵守文件的锁定。我什至尝试过Filechannel.lock(),但它也没有帮助。

任何建议表示赞赏。

4

3 回答 3

6

只要您打开句柄,他们就可以从目录中删除文件,但不能删除文件。即,在您关闭文件或进程终止之前,不会删除该文件。

我什至尝试过 Filechaanel.lock() 但它也没有帮助。

那是因为它是目录,而不是正在更改的文件。例如,如果他们对文件有写访问权,但对目录没有写访问权,他们就不能删除它。

于 2013-02-05T14:19:44.207 回答
3

您还可以查看可用于锁定文件的chattr 。

chattr +i filename

应该使文件不可删除。然后,您可以通过...使其再次可删除

chattr -i filename 
于 2013-02-05T14:21:27.043 回答
1

对此没有纯 Java 解决方案。事实上,我认为根本没有一种解决方案不会产生潜在的不良后果。根本问题是 UNIX / LINUX 没有办法在文件上临时设置强制锁定。(用于锁定文件的 Linux 系统调用是flock,但flock 式锁定是任意的。不打扰flock文件的应用程序不会受到文件上其他应用程序锁定的影响。)

您可以做的最好的事情是使用chattr +i在文件上设置“不可变”属性。不幸的是,这还有其他影响:

  • 无法写入或链接到不可变文件。

  • 如果您的应用程序在没有取消设置属性的情况下崩溃,则用户会留下一个他/她神秘地无法更改或删除的文件。即使使用 sudo 或 su 也不行。

于 2013-02-05T14:24:38.083 回答