Java 断电期间如何执行文件操作

Java 断电期间如何执行文件操作,java,linux,operating-system,filesystems,Java,Linux,Operating System,Filesystems,Linux机器,Java独立应用程序 我的情况如下: 我有: 连续文件写入(创建目标文件并向其中写入一些内容)和文件移动 我还有一个停电问题,在这些操作过程中会立即切断计算机的电源 因此,我发现创建了文件,并将其移动,但文件内容为空。 问题是到底是什么导致了这样的结果?考虑到时间敏感性,可能是硬盘驱动器在处理器和RAM剪切期间被禁用,但在这种情况下,如何可能在之后创建和移动文件,但移动前写入未成功 我尝试捕获并记录异常和调试信息,但问题是断电也会禁用日志记录功能(I/O) Linux文件系统不一

Linux机器,Java独立应用程序

我的情况如下:

我有: 连续文件写入(创建目标文件并向其中写入一些内容)和文件移动

我还有一个停电问题,在这些操作过程中会立即切断计算机的电源

因此,我发现创建了文件,并将其移动,但文件内容为空。

问题是到底是什么导致了这样的结果?考虑到时间敏感性,可能是硬盘驱动器在处理器和RAM剪切期间被禁用,但在这种情况下,如何可能在之后创建和移动文件,但移动前写入未成功

我尝试捕获并记录异常和调试信息,但问题是断电也会禁用日志记录功能(I/O)


Linux文件系统不一定立即将内容写入磁盘,也不一定完全按照您写入它们的顺序写入。它包括文件内容和文件/目录元数据

因此,如果在错误的时间发生电源故障,您可能会发现文件数据和元数据不一致

通常这并不重要。(如果电源出现故障,而您没有UPS,则应用程序将无法完成其工作。)

但是,如果确实重要,可以执行以下操作:在移动文件之前强制文件“同步”:

   FileOutputStream fos = ...

   // write to file

   fs.getFD().sync();
   fs.close();

   // now move it
您需要仔细阅读for
sync()
,以了解该方法的实际功能

您还需要阅读javadoc,了解用于移动有关原子性的文件的方法

   FileOutputStream fos = ...

   // write to file

   fs.getFD().sync();
   fs.close();

   // now move it