Linux上的Java写入文件被删除但我仍然可以写入它

use*_*731 4 java linux performance

我有一个将文件写入磁盘的Java应用程序.问题是,Linux不像Windows那样锁定文件,因此有人可以在写入文件时删除该文件.当发生这种情况时,我的Java应用程序会像文件仍然存在一样继续...甚至允许更多写入,没有例外.

我添加了一个检查:file.exists(),但这会使我的性能下降近50%.任何人都有任何聪明的想法,我如何解决这个问题,并保持我的表现高?

Ern*_*ill 7

听到这被认为是一个"问题",这很有趣 - 我们这些在UNIX上煞费苦心的人认为Windows的文件锁定方法是粗暴而痛苦的.

如果您无法使用文件的权限(大部分)防止这种情况,我认为File.exists()是唯一的解决方案在这里,但想必你可能不经常调用它,如果它导致性能问题 - 也许从"收割者"偶尔醒来的线程来检查这种情况.

  • 请注意,这根本不是Java的东西 - 所有代码都会做同样的事情.就其工作原理而言:只要任何进程引用文件,文件的内核数据结构就不会消失.UNIX是围绕着一切都是文件的概念构建的 - 终端,网络,各种设备,甚至是"/ dev/null",这是一个无处可去的特殊文件 - 所以写入一个文件的概念并不存在实际存在不是外来的. (4认同)