我有一段 JAVA 代码,它读取一些文件并将它们加载到内存中一段时间。文件句柄在读取后保留。我的问题是我想限制用户使用“DEL”键或 rm 命令删除这些文件。
我可以通过保留文件句柄在 Windows 上实现相同的目的,而在 Unix rm 上不遵守文件的锁定。我什至尝试过Filechannel.lock()
,但它也没有帮助。
任何建议表示赞赏。
只要您打开句柄,他们就可以从目录中删除文件,但不能删除文件。即,在您关闭文件或进程终止之前,不会删除该文件。
我什至尝试过 Filechaanel.lock() 但它也没有帮助。
那是因为它是目录,而不是正在更改的文件。例如,如果他们对文件有写访问权,但对目录没有写访问权,他们就不能删除它。
对此没有纯 Java 解决方案。事实上,我认为根本没有一种解决方案不会产生潜在的不良后果。根本问题是 UNIX / LINUX 没有办法在文件上临时设置强制锁定。(用于锁定文件的 Linux 系统调用是flock
,但flock 式锁定是任意的。不打扰flock
文件的应用程序不会受到文件上其他应用程序锁定的影响。)
您可以做的最好的事情是使用chattr +i
在文件上设置“不可变”属性。不幸的是,这还有其他影响:
无法写入或链接到不可变文件。
如果您的应用程序在没有取消设置属性的情况下崩溃,则用户会留下一个他/她神秘地无法更改或删除的文件。即使使用 sudo 或 su 也不行。