我无意中在Linux上运行了一个Java程序,它所在的分区,它的属性和日志所在的分区接近100%已满。它失败了,但是在清除了磁盘空间的问题之后,我再次运行它并且第二次失败,因为它的属性文件是0字节长。
我没有该文件的来源,我不想去反编译类文件,但我想知道这些文件的损坏是否是因为程序无法写入属性文件
谜团是,我希望这些属性是只读的,不要回想起程序正在更新的任何项目。难道即使只读取属性,文件也会以读写模式打开,如果分区已满,它可能会消失吗?
N.b。这个程序在几年内至少运行了1000次没有失败或事故。
答案 0 :(得分:1)
我没有该文件的来源,我不想去反编译类文件,但我想知道这些文件的损坏是否是因为程序无法写入属性文件
这是最可能的解释。会有一个例外,但应用程序可能会压扁它......或者您可能没有注意到错误消息。 (实际上,如果应用程序试图将错误记录到文件中,那么很可能也会失败。)
即使只读取属性,文件也会以读写模式打开,如果分区已满,它可能会消失吗?
在这种情况下,这不太可能是答案。与许多语言不同,在Java中,用于读取文件和编写文件的代码涉及不同的流类。很难想象应用程序的开发人员如何打开一个属性文件进行写入(截断),如果从来没有打算写它的话。很难想象。
最合理的解释是应用程序 更新属性文件。 (尝试再次安装程序,使用它,停止它,并查看属性文件的修改时间戳。)
N.b。这个程序在几年内至少运行了1000次没有失败或事故。
我打赌这是你第一次在磁盘已满时运行它: - )