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